Я хочу кэшировать роли пользователя для каждого входящего запроса. На любой странице есть несколько мест, где где у нас есть что-то вроде:
<% 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 ()
будет искать элемент в контексте, и, возможно, это не самый эффективный вариант. Я действительно хочу знать, будет ли это кэшироваться для каждого запроса, чтобы не было перекрытия с запросами других пользователей.