Les rôles d’utilisateur du contrôle d’identité ASP.NET ne fonctionnent pas

J’ai une application ASP.NET MVC 5. J’utilise le fournisseur d’identité ASP.NET standard pour la gestion des utilisateurs et des rôles. Il est important que j’utilise IdentityUser depuis un projet de référentiel propre, mais cela semble correct Je peux m’inscrire, me connecter, éditer des utilisateurs et gérer leurs rôles.

J’ajoute l’utilisateur à Rôle avec ces lignes:

UserManager.AddToRole(userdetail.Id, r); db.Entry(userdetail).State = EntityState.Modified; db.SaveChanges(); 

Cela semble fonctionner au niveau de la firebase database.

Mais, je ne peux pas utiliser d’authentification basée sur les rôles, en fait les simples

 HttpContext.User.IsInRole("Administrator") 

ne fonctionne pas trop.

 [Authorize(Roles="Administrator")] 

ne fonctionne pas trop.

Je ne peux vérifier qu’avec cette méthode, si l’utilisateur est un administrateur:

 UserManager.IsInRole(userID, "Administrator"). 

Pourquoi?

Dans chaque tutoriel que j’ai trouvé, tout fonctionne bien. Le référentiel de projet différent pourrait être la raison? Ou bien l’identité ASP.NET est tellement cassée?

S’il vous plaît des conseils,

Il semble y avoir un problème. [La question par conception]

  • Les noms de rôle sont sensibles à la casse dans AuthorizeAtsortingbute et User.IsInRole
  • Les noms de rôle sont insensibles à la casse dans UserManager.IsInRole

De plus, vérifiez que le nom de rôle correct est utilisé pour la vérification.

[Ce qui précède est basé sur le test effectué avec le code ci-dessous. Nom du rôle = “Admin”, l’utilisateur est ajouté au rôle “Admin”.]

 [Authorize(Roles="Admin")] /*True as "Admin" has A capital as entered in Role name*/ public ActionResult Secured() { if (User.IsInRole("admin")) /*This is False*/ { Console.WriteLine("In"); } if(UserManager.IsInRole(User.Identity.GetUserId(), "admin")) /*This is True!!*/ { Console.WriteLine("In"); } return View(); } 

Si nous modifions l’atsortingbut en [Authorize(Roles="admin")] , la redirection vers la page de connexion.

Dans ce cas, vous devez vous déconnecter et vous reconnecter à l’utilisateur.

Comme les données de rôles sont également stockées dans des cookies, vous devez donc émettre à nouveau le cookie pour pouvoir fonctionner.

Avez-vous cette entrée dans votre web.config?

        

De plus, si je me souviens bien, il existe un espace de noms différent pour l’assembly du fournisseur de rôle dans différentes versions de .NET.