Autoriser l'attribut ne fonctionne pas avec des rôles
J'ai de la difficulté à obtenir les Authorize
attribut de travailler avec des rôles. C'est de cette façon que j'ai décoré mon contrôleur:
[Authorize(Roles = "admin")]
public ActionResult Index()
{
...
}
et c'est ainsi que je me connecte un utilisateur dans:
string roles = "admin";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
username,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
roles
);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
HttpContext.Current.Response.Cookies.Add(cookie);
Mais mon utilisateur est toujours refusé l'accès. Où vais-je tort?
OriginalL'auteur Jonathan | 2013-09-15
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur un exemple similaire de votre code: le plus voté réponse de MVC - Comment stocker/attribuer des rôles à des utilisateurs authentifiés.
La AuthorizeAttribute appelle la IsInRole méthode sur la IPrincipal exemple stockées dans HttpContext.L'utilisateur. Par défaut IPrincipal n'a pas de rôles, et dans ce cas IsInRole renverra toujours false. C'est pourquoi l'accès à votre action est refusé.
Depuis que vous avez stocké les rôles de l'utilisateur dans le FormsAuthenticationTicket de UserData de la propriété, vous devez extraire les rôles de l'auth cookie et dans un IPrincipal exemple vous-même. Le plus voté réponse de MVC - Comment stocker/attribuer des rôles à des utilisateurs authentifiés fournit le code que vous pouvez ajouter directement dans votre global.asax.cs fichier pour faire juste cela. J'ai repris ci-dessous:
OriginalL'auteur Adrian Toman