HttpContext.Actuel.De l'utilisateur.IsInRole ne fonctionne pas
dans mon contrôleur de l'action authcontroller/signin j'ai ce code:
entities.UserAccount user = (new BLL.GestionUserAccount()).authentifier(email, password);
//storing the userId in a cookie
string roles = (new BLL.GestionUserAccount()).GetUserRoles(user.IdUser);
//Initialize FormsAuthentication, for what it's worth
FormsAuthentication.Initialize();
//
FormsAuthentication.SetAuthCookie(user.IdUser.ToString(), false);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, //Ticket version
user.IdUser.ToString(), //Username associated with ticket
DateTime.Now, //Date/time issued
DateTime.Now.AddMinutes(30), //Date/time to expire
true, //"true" for a persistent user cookie
roles, //User-data, in this case the roles
FormsAuthentication.FormsCookiePath);//Path cookie valid for
//Encrypt the cookie using the machine key for secure transport
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(
FormsAuthentication.FormsCookieName, //Name of auth cookie
hash); //Hashed ticket
//Get the stored user-data, in this case, our roles
//Set the cookie's expiration time to the tickets expiration time
if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;
//Add the cookie to the list for outgoing response
Response.Cookies.Add(cookie);
return RedirectToAction("index", "Home");
dans la page principale, j'ai un menu ,dans le menu il y a un élément qui est destiné à être vu que par le rôle admin.
<% if (HttpContext.Current.User.IsInRole("admin")){ %>
<%=Html.ActionLink("Places", "Places", "Places")%>
<%} %>
même avec HttpContext.Actuel.L'utilisateur conatining le droit de rôles,je ne peux pas voir l'élément:
globalx asax:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id =
(FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
//Get the stored user-data, in this case, our roles
string userData = ticket.UserData;
string[] roles = userData.Split(',');
HttpContext.Current.User = new GenericPrincipal(id, roles);
}
}
}
}
Pouvez-vous vérifier si le
gideo ,vérifier l'image.mes rôles sont là.
Je sais que cela semble ridicule, mais c'est votre
gédéon,vous avez raison.il y "admin" en venant de ma base de données.trim() a arrangé les choses.Je vous remercie.Dois-je supprimer la question?
haha! Est sauvage, le deviner, mais c'est pas ce que je pensais que c'était! =) Non, vous n'avez pas besoin de supprimer la question (en effet vous ne pouvez pas) C'était une question écrite et peut être utile à quelqu'un.
Current.User
rôle principal est correctement créé?gideo ,vérifier l'image.mes rôles sont là.
Je sais que cela semble ridicule, mais c'est votre
userData
de votre billet. La seule chose que je peux penser si c'est si la userData
ne va pas dans le principal. (Peut-être un problème avec les trois dernières lignes de glabal.asax
) Juste une pensée.gédéon,vous avez raison.il y "admin" en venant de ma base de données.trim() a arrangé les choses.Je vous remercie.Dois-je supprimer la question?
haha! Est sauvage, le deviner, mais c'est pas ce que je pensais que c'était! =) Non, vous n'avez pas besoin de supprimer la question (en effet vous ne pouvez pas) C'était une question écrite et peut être utile à quelqu'un.
OriginalL'auteur | 2012-01-24
Vous devez vous connecter pour publier un commentaire.
Je sais que cela semble stupide, mais à partir de votre image, je ne peux voir votre
userData
de votre billet.La seule chose que je peux penser si c'est si la
userData
ne va pas dans le principal. (Peut-être un problème avec les trois dernières lignes de glabal.asax.cs)Quelque chose qui est faux ici:
OriginalL'auteur gideon
Au lieu d'utiliser
User.IsInRole()
, essayez la méthode statiqueRoles.IsUserInRole()
.OriginalL'auteur Old Geezer
Vous aurez besoin d'un custom Autoriser l'attribut qui va analyser les données de l'utilisateur partie du ticket d'authentification et de créer manuellement le IPrincipal. Jetez un oeil à ce post qui illustre la façon dont je voudrais vous recommandons de le faire dans ASP.NET MVC. N'utilisez jamais de
HttpContext.Current
dans un ASP.NET application MVC. Pas même dans vos vues. Utilisation<% if (User.IsInRole("admin")) { %>
à la place.J'ai mis à jour ma réponse avec un lien vers un exemple de la façon dont je voudrais vous recommandons de procéder à un ASP.NET application MVC: stackoverflow.com/a/5476355/29407 Il est beaucoup plus MVCish moyen d'y parvenir.
en quoi c'est MVCish? MyAuthorizeAttribute : AuthorizeAttribute?
c'est parce que dans ASP.NET MVC-vous de contrôle l'autorisation d'utiliser des filtres tels que l'attribut [Authorize]. Et ni le cas où vous avez besoin pour gérer personnalisé autorisation que dans votre cas vous écrire une coutume de l'autorisation de l'attribut. Les événements dans le monde.asax comme Application_Request, Application_AuthenticateRequest, ... sont utilisés dans les formulaires web classique. Dans ASP.NET MVC il y a plus de natif de façons de le faire.
OriginalL'auteur Darin Dimitrov
Une instruction est manquant.
Après cette ligne:
Vous avez besoin pour mettre cette ligne:
OriginalL'auteur Jeff Lim
Mondiale.asax attribuer principal sur 2 objets comme ça:
Je l'ai trouvé ici ASP.NET la documentation
OriginalL'auteur Xawery Wiśniowiecki