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 à partir d'un propre projet de référentiel, mais cela semble correct. Je peux enregistrer, me connecter, modifier des utilisateurs et gérer leurs rôles.
J'ajoute l'utilisateur au rôle avec ces lignes:
UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
Cela semble fonctionner au niveau DB.
Mais, je ne peux pas utiliser les authentifications basées 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 des différents projets pourrait être la raison? Ou l'identité ASP.NET est tellement cassée?
Veuillez conseiller,
Il semble y avoir un problème. [Le problème par conception]
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 changeons l'attribut en [Authorize(Roles="admin")]
, il redirige vers la page de connexion.
Dans ce cas, vous devez vous déconnecter et vous reconnecter.
Parce que les données de rôles sont également stockées dans des cookies, vous devez donc émettre à nouveau le cookie pour le faire fonctionner.
Avez-vous cette entrée dans votre web.config?
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" />
</providers>
</roleManager>
De plus, si je me souviens bien, il existe un espace de noms différent pour l'assembly du fournisseur de rôles dans différentes versions de .NET.