Храните/присваивайте роли аутентифицируемых пользователей

Другой полезная Находка короткое сочетание клавиш является Ctrl (+ Сдвиг) F-> ALT C-> ALT W для переключения между точными и нечеткими поисками.

54
задан alex 18 December 2014 в 06:56
поделиться

3 ответа

Когда вы аутентифицируете своего пользователя, вы генерируете новый экземпляр GenericPrincipal. Конструктор принимает массив строк, которые являются ролями для пользователя. Теперь установите HttpContext.Current.User равным универсальному принципалу и напишите файл cookie аутентификации, и это должно сделать это.

6
ответ дан 7 November 2019 в 07:46
поделиться

Роли добавляются в IPrincipal HttpContext. Вы можете создать GenericPrincipal , проанализировать список ролей в конструкторе и установить его как HttpContext.User. После этого GenericPrincipal будет доступен через User.IsInRole ("role") или атрибут [Authorize (Roles = "role")]

Один из способов сделать это (в C #) состоит в том, чтобы добавить ваши роли в виде строки, разделенной запятыми, в параметре пользовательских данных при создании билета аутентификации

string roles = "Admin,Member";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
  1,
  userId,  //user id
  DateTime.Now,
  DateTime.Now.AddMinutes(20),  // expiry
  false,  //do not remember
  roles, 
  "/");
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
                                   FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);

Затем откройте список ролей из билета аутентификации и создайте GenericPrincipal из вашего Global.asax.cs

protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
  HttpCookie authCookie = 
                Context.Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie != null) {
      FormsAuthenticationTicket authTicket = 
                                  FormsAuthentication.Decrypt(authCookie.Value);
      string[] roles = authTicket.UserData.Split(new Char[] { ',' });
      GenericPrincipal userPrincipal =
                       new GenericPrincipal(new GenericIdentity(authTicket.Name),roles);
      Context.User = userPrincipal;
    }
  }
126
ответ дан 7 November 2019 в 07:46
поделиться

Не могли бы вы использовать диспетчер ролей хранилища авторизации или найти (например, на Codeplex) или написать другого поставщика ролей, который работает с Active Directory, чтобы получить информацию о группах?

Это избавит вас от хлопот с аутентификацией пользователя, получением его ролей, а затем повторной передачей этой информации в конструктор, и все это произойдет автоматически для вас как часть фреймворка.

1
ответ дан 7 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

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