2011-10-04 94 views
0

对于我服务中的每个功能,我都有一个安全查找来确保用户有权访问该功能。在数据库或会话中存储安全性查找?

查找函数被调用,如:

SecurityCheck("Insert", "Book", Session.UserID); 

查找表看起来是这样的:

 | Select All | Select Own | Insert | Update | Delete | 
Book | true  | true | false | false | false | 
Author | true  | true | true | true | true | 
... 

查找表将最终被30-40行。

我读过复杂的对象应该不会存储在会话中。这个对象通常被认为太大而无法存储在我的会话中?

对每个函数的额外数据库调用是否会显着减慢我的应用程序?适合放置这张桌子的地方在哪里?

回答

2

30-40行不是那么大,它会在内存中的500-1000(如果添加更多的东西)字节为每个用户1k 1000个用户。

但是作为一般的规则,当你进行缓存时,你必须平衡使用内存和速度。在这种情况下,这取决于这些服务被调用的频率以及响应时间。 示例如果您有一个需要1秒的功能,并且它被称为1次/秒,那么您可以使用数据库版本。如果你的功能正确/清理,它不应该影响性能。

如果你有一个函数,需要0.10秒,并被称为100次/秒比我建议使用内存缓存。

注意:上述规则仅适用于内存会话。 - 如果你有一个SQL会话 - 不要把它们放在会话中 - 通过正常的SQL加载它们,我认为它应该比从DB &反序列化它们加载得更快。
- 如果你有这将取决于服务器如何执行,但仍即使在这种情况下,你可能想将他们从SQL中仍存在序列化将要发生

这些2箱子另一个会话状态服务器选项是将用户权限放入应用程序缓存中。