【发布时间】:2016-12-04 08:22:11
【问题描述】:
如果这个问题有点离题,请告诉我。 我将把它带到别处,但我想获得一些关于如何在现有项目中完成某事的想法。
我的 Web 应用程序(使用 ASP.NET MVC 5 和 ASP.NET Identity 2.0)使用自定义角色提供程序执行授权(通过那些花哨的 Authorize 属性)。
每个授权检查(如Authorize(Roles = "Admin"))都需要查询数据库以执行以下操作:
- 从
Semesters表中获取当前“学期”(检查当前日期和时间所在的日期范围) - 从
Positions表中获取名为“Admin”的职位 - 检查
Leaders表中是否存在包含当前用户ID、获取的学期ID、获取的职位ID的记录。
如果记录存在,则用户被授权,否则不被授权。 需要明确的是,角色分配与学期相关联,以便将相应的权限限制在学期的持续时间内。 即,一旦学期结束,用户不再拥有他们的权力,但下学期任命的下一个人将立即获得他们的权力。
我的大多数用户都属于在他们访问的绝大多数页面上检查的角色,但不是全部。 每次我需要授权时,都会执行所有这些步骤。
有没有办法将这些授权缓存(这样我不必不断地查询数据库)一段相当于从第一次执行/缓存到学期结束的时间的时间? 或者只是在任何合理的时间内缓存它们? 理想情况下,如果一个学期或职位因任何原因而更新,授权将以某种方式无效并重新缓存。 最后,自定义 RoleProvider 是解决此问题的可靠方法吗?
【问题讨论】:
标签: c# asp.net asp.net-mvc caching asp.net-identity-2