我想缓存一个用户对每个请求的角色.在任何给定的页面中,有几个地方我们有以下类型的东西:
@H_502_11@解决方法
<% if(Roles.IsUserInRole("RoleName")) {%> <!-- Conditional Rendering --> <% } else if(Roles.IsUserInRole("AnotherRole") {%> <!-- You get the point --> <% } %>
由于这都存储在sql数据库中,所以这些请求中的每一个都会触发数据库.我知道有一些方法来缓存一个cookie中的角色,但是我不想这样做.无论如何,我在想什么是这样的.
public static class SecurityUtils { public static string[] UserRoles() { var context = HttpContext.Current; if (context == null) return Enumerable.Empty<string>(); string[] roles; roles = context.Items["UserRoles"] as string[]; if (roles == null) { roles = Roles.GetRolesForUser(); context.Items["UserRoles"] = roles; } return roles; } }
有人看到这个问题吗?我知道曾经调用过UserRoles()会在上下文中查找该项目,也许这不是最有效的方法.我真正想知道的是,如果这将按照每个请求缓存它,所以与其他用户请求没有重叠.