Когда нужно получать роли пользователя ASP.NET MVC?

Добрый вечер!

Существует сущность "Роль" в БД Roles (RoleId, RoleName). Есть сущность пользователь User (UserId, UserName, ...), и есть связь UsersRoles (UserId, RoleId).

Соответственно в приложении ASP.NET MVC есть собственный контроллер BaseController: Controller, в котором реализована следующее переопределение стандартного IPrincipal на свой IAppPrincipal:

protected virtual new AppUserPrincipal User
{
	get { return new AppUserPrincipal(base.User); }
}


Чтобы потом в любом котроллере, например HomeController: BaseController можно было обратиться к объекту "Текущий пользователь":

var userCode = User.Code;
ViewBag.UserName = User.Firstname;

bool access = User.IsInRoles("Admin, SuperAdmin");


Вопрос - Где заполнять роли пользователя?

1 - Один раз во время логина, добавляя роли через Claims? Но тогда, если список ролей пользователя во время работы его с приложением изменится, пользователь по прежнему не будет обладать этими ролями по факту до того момента, как он не залогиниться по новой.

2 - Каждый раз при новом запросе к странице, делать запрос к БД и брать роли пользователя. Считается ли это нормальной практикой?

Очень нужна консультация в этих вопросах!
Заранее благодарю за любую помощь!
  • Вопрос задан
  • 742 просмотра
Пригласить эксперта
Ответы на вопрос 1
В Identity 2.0 вроде по умолчанию каждые 30 минут куки обновляется, мол изменился пароль или еще чего проверяет, так же и роли обновляет.
Изменить на меньшее время.
Caching Role Information

// Enable the application to use a cookie to store information for the signed in user
            // and to use a cookie to temporarily store information about a user logging in with a third party login provider
            // Configure the sign in cookie
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    // Enables the application to validate the security stamp when the user logs in.
                    // This is a security feature which is used when you change a password or add an external login to your account.  
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы