De l'utilisateur.IsInRole ne fonctionne pas
J'ai ASP.NET MVC 4 application. J'utilise Simple Fournisseur d'Appartenance permettant de cocher la case se souvenir de moi sous formulaire de connexion. Si coché, persitent cookie .ASPXAUTH est créé qui expire 100 jours à partir de la date d'ouverture de session. Et tout fonctionne bien, à part le menu principal de l'application.
Certaines parties du menu sont disponibles pour les utilisateurs admin seulement. J'utilise:
@if (User.IsInRole("Administrator")) { @Html.Partial("_MainMenuPartial") }
pour verrouiller le rendu pour l'utilisateur ordinaire. Cette approche fonctionne très bien juste après l'enregistrement dans le système. Quand je serais de retour après un certain temps et cookie persistant est utilisé pour authentifier moi, je ne reçois pas connecté, mais
@User.IsInRole("Administrator")
renvoie "False" donc je ne vois pas admin éléments de menu. Dans le même temps
@User.Identity.Name
renvoie bon nom de connexion et
@User.Identity.IsAuthenticated
renvoie la valeur "True", ce qui prouve que les cookies persistants fonctionne très bien. Pourquoi ne puis-je pas accéder à des rôles d'utilisateur, même si l'utilisateur est authentifié par le système alors?
- Comment avez-vous fait de créer des rôles? Quand dois attribuer des rôles aux utilisateurs dans votre Registre ActionResult?
- Oui, c'est la façon dont je le fais dans le Registre de l'action: les Rôles.AddUsersToRoles(new[] { modèle.UserName }, new[] { role }); Tandis que le rôle est une chaîne déterminé précédemment.
- Un moyen plus sûr de faire est à votre InitialiseSimpleMembershipAttribute.cs de la classe: un peu moins de
Websecurity.InitialiseDatabaseConnection
utilisationif (!Roles.RoleExists("Admin")) Roles.CreateRole("Admin");
. Avez-vous essayé d'utiliser la méthode surchargée je l'ai indiqué dans ma réponse. - La solution que j'ai trouvée à ce problème a été l'ajout d'un filtre dans le RegisterGlobalFilters méthode de la FilterConfig classe dans le App_Start dossier. Voir ce pour plus de détails: stackoverflow.com/questions/16215316/...
Vous devez vous connecter pour publier un commentaire.
Problème à l'aide de rôles avec MVC5
J'ai trouvé une solution. Dans mon web.config:
J'ai ajouté supprimer name="RoleManager", et le nouveau Réseau.Le code d'identification a pris plus de me permettre d'utiliser de l'Utilisateur.IsInRole(..)
http://forums.asp.net/t/1952572.aspx?Problem+utilisation+des rôles+avec+MVC5
J'ai eu un smilar question. Dans mon cas, le problème a été résolu quand je déconnectez-vous et reconnectez-vous.
Avez-vous essayé d'ajouter
dans le contrôleur de l'endroit où vous êtes en train de faire le chèque?
Vieille question, mais il y a certaines informations manquantes ici. J'ai rencontré le même problème, et il y a une chose à garder à l'esprit. Si vous testez l'identité de l'utilisateur (comme Utilisateur.IsInRole("admin")) juste après authentifier (sans envoyer la réponse au client), l'Identité du cadre n'a pas renseigné cette session encore d'infos sur (ou au moins, je n'aurais pas trouvé le moyen de le faire). Cette info que vous demandez, est peuplée à un certain point, après votre contrôleur de retour. Si vous le souhaitez (I. E.) pour rediriger vers différents points de vue après la connexion, en fonction du rôle d'utilisateur, vous devrez utiliser un custom autorisation de filtre.
J'ai eu un problème similaire avec
IsUserInRole
retourner false. En plaçant une veille sur elle, j'ai été en mesure de surmonter le problème en utilisant le dispositif décrit ci-dessous. Essayez-la, placez un point de rupture où vous êtes l'obtention de faux, et de voir ce qui se passe.Je suis sûr que vous pouvez également utiliser
User.Identity.Name
en tant que premier paramètre.J'ai eu un problème similaire, il semble module d'authentification n'est pas câblé complètement avec le SimpleMembershipProvider. Pour contourner ce problème, vous pouvez utiliser un Rôle de classe pour accéder à l'information nécessaire. Par exemple, pour vérifier si l'utilisation de rôle, vous pouvez utiliser les éléments suivants:
Et donc d'autres méthodes utiles lorsque vous travaillez wit SimpleMembershipProvider rôles:
J'ai eu un problème similaire, mais dans mon cas, le problème était que le délai d'expiration de Session n'a pas été synchronisé avec l'authentification de délai d'attente, donc je n'ai pas été viré automatiquement mais ma session a expiré et, depuis mes opérations autorisées ont été stockés dans une Variable de Session, je n'ai pas été en mesure de récupérer les options correctes pour l'utilisateur actuel.
Essayez de vérifier si votre session n'est pas expiré, même si vous êtes toujours connecté
Assez vieux sujet, mais peut confirmer vs 2015 formulaires Web application fonctionne solution:
La "EmailConfirmed" de ce compte probablement encore faux, essayez de changer la valeur vrai
Aucune de ces réponses a fonctionné pour moi, mais j'ai trouvé la réponse ici: https://thinkthencode.wordpress.com/2016/04/24/azure-ad-using-app-roles-for-authorization/
L'essentiel était de l'adjonction, à
Startup.Auth.cs
:Si vous êtes en utilisant les dernières Identité cadre merci de voir si vous utilisez la suite
Si vous utilisez AddDefaultIdentity Rôles ne sont pas remplis.
Si vous utilisez IdentityManager par Brock Allen pour créer des rôles et de les affecter à des utilisateurs, alors vous devriez lire cet article: https://github.com/IdentityManager/IdentityManager.AspNetIdentity/issues/3
Vous devez décommenter la ligne suivante:
Maintenant, vous vous rendrez compte que votre utilisateur que l'habitude d'être dans des rôles n'est plus en eux, et vous aurez de nouveau à ajouter. Si vous jetez un oeil à la AspNetUserClaims de table, vous verrez claimType de Rôle et ' http://schemas.microsoft.com/ws/2008/06/identity/claims/role " vous voulez le plus tard.
Une fois que vous faites cela,
User.IsInRole("rolename")
se comporte comme prévu.J'espère que cela aide quelqu'un, m'a fallu un certain temps pour comprendre cela.
IdentityManager.Configuration.SecurityConfiguration.RoleClaimType
est fixé àConstants.ClaimTypes.Role
, c'est à dire de "rôle", encoreSystem.Security.Claims.ClaimsPrincipal.IsInRole(string role)
neHasClaim(m_identities[i].RoleClaimType, role)
, oùRoleClaimType
est "schemas.microsoft.com/ws/2008/06/identity/claims/role". Problème avec votre correction, qui fonctionne, c'est qu'on ne sera pas en mesure d'utiliser revendication de "rôle" dans l'INTERFACE utilisateur plus et aurait pour aller avec cette longue chaîne.J'ai eu du mal avec le MVC5 rôle de gestionnaire pour un certain temps maintenant. J'ai vérifié que
User.IsInRole
peut retourner des résultats différents en même temps, et apparemment c'est parce que leUser
objet est mis en cache et doit être invalidé. Une façon de le faire est de se déconnecter et de se reconnecter à nouveau comme l'une des réponses spécifié ici. Il suffit de jeter ce, dans le contrôleur, qui ajoute un nouveau rôle:Toutefois, si l'utilisateur a votre application, ouvrez dans d'autres fenêtres, ce ne sera pas de mise à jour de tous les.
Ajouter la Page en face de l'Utilisateur. Cela fonctionne:
Page.User.IsInRole("Administrator")
Pour mon code, il a dû être pluriel, pas de singulier:
AspNetRoles
de la table de configuration dans votre base de données dans leName
colonne