我有一个授权属性和一个HTML扩展程序,用于检查用户是否有权查看或访问所需的数据。在应用程序中,用户的权限可能不会经常更改,但是当他们被更改时,我需要立即(或至少在一两分钟内)生效,即使用户已登录。
AuthorizeAttribute示例
[RequireRoles(RolesRequired = RoleTypes.Admin)]
剃刀视图中的HtmlExtension
@if (Html.RequireRoles(RoleTypes.Admin | RoleTypes.User)){}
Authorize Attribute和Html Extension都使用相同的代码从数据库中检索用户的角色。
调用View时,它通常具有主视图。在主视图中,我可以调用HtmlExtension 6次(可能或多或少取决于我当时显示的内容),根据用户的访问权限构建菜单(这也将在其他视图中使用)。
然后页面上可能会有一些控制器(比方说3)被调用,控制器使用授权属性来确保他们有权执行所需操作。
这意味着在用户登录并转到页面(MyApp / Index)后,它将对数据库进行9次调用以检查用户的当前权限。虽然返回的是少量数据,但我认为这样做的次数太多了。
我曾考虑使用缓存暂时保留数据,但我不确定这是否在Web场方案中支持。
所以我的问题是,使用Web场在短时间内保存此数据的最佳方法是什么?