MVC - FormsAuthentication Получить RoleName - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в ASP.NET MVC и изучаю, как настраивать роли с помощью FormAuthentication из этого руководства. ссылка

Этот код ниже хранит роли.Это прекрасно работает, когда я выполняю это [Authorize(Roles="admin")] в контроллере

protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
    if (FormsAuthentication.CookiesSupported == true)
    {
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            try
            {
                //let us take out the username now                
                string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
                string roles = string.Empty;

                using (userDbEntities entities = new userDbEntities())
                {
                    User user = entities.Users.SingleOrDefault(u => u.username == username);

                    roles = user.Roles;
                }
                //let us extract the roles from our own custom cookie


                //Let us set the Pricipal with our user specific details
                HttpContext.Current.User  = new System.Security.Principal.GenericPrincipal(
                  new System.Security.Principal.GenericIdentity(username, "Forms"), roles.Split(';'));
            }
            catch (Exception)
            {
                //somehting went wrong
            }
        }
    }
}

Есть ли способ получить фактическое имя роли на основе текущего User.Identity?как псевдокод ниже.

[Authorize]    
public ActionResult Index()
{
    bool isAdmin = System.Web.HttpContext.Current.User.IsInRole("admin");  // This also works correctly.
    Response.Write("role: " + isAdmin);

    string roleName = // The Code of How to get the actual Role Name
    Response.Write("roleName: " + roleName);  //e.g Admin, User...

    return View();
}

1 Ответ

0 голосов
/ 30 мая 2018

Из комментария: Знаете ли вы какую-нибудь хорошую статью об аутентификации файлов cookie OWIN для пользовательской таблицы для имени пользователя и ролей?

В ней есть несколько частей, поэтому я создалпример проекта в GitHub AspNetMvcActiveDirectoryOwin . Первоначальный источник - аутентификация с помощью AD, но вам просто нужно изменить ActiveDirectoryService класс, в котором вы запрашиваете пользовательские таблицы.

Следующие три основных класса -

  1. AccountController

  2. ActiveDirectoryService

  3. OwinAuthenticationService заменяет FormsAuthentication.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...