在数据库或会话中存储安全性查找



对于我的服务中的每个函数,我都有一个安全性查找,以确保用户具有访问该函数的权限。

查找函数的调用方式如下:

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行。

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

对每个函数的额外数据库调用会显著降低应用程序的速度吗?存储该表的合适位置在哪里?

30-40行不是那么大,每个用户大约有500-1000字节(如果您添加更多的东西)内存。

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

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

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

对于这两种情况,另一种选择是将用户权限放在应用程序缓存中。

最新更新