@WhiteNinja

Когда нужно получать роли пользователя 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 - Каждый раз при новом запросе к странице, делать запрос к БД и брать роли пользователя. Считается ли это нормальной практикой?

Очень нужна консультация в этих вопросах!
Заранее благодарю за любую помощь!
  • Вопрос задан
  • 218 просмотров
Пригласить эксперта
Ответы на вопрос 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))
                    }
                });
    Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга Все вакансии
Заказы с Фрилансим Все заказы