Статические данные для каждого запроса в ASP.NET

Я хочу кэшировать роли пользователя для каждого входящего запроса. На любой странице есть несколько мест, где где у нас есть что-то вроде:

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

10
задан Micah 9 February 2011 в 20:45
поделиться