3 pièce(s) jointe(s)
Problème avec l'attriburt Authorize qui bloque tout
Bonjour,
Je ne comprend pas comment fonctionne la gestion des Roles.
Voici une action que je ne veux autoriser qu'aux administrateurs.
Code:
1 2
| [Authorize(Roles ="Administrateur")]
public ActionResult Edit(int id) |
Mais lorsque je me connecte avec un compte ayant le rôle administrateur, je n'atteins pas la page prévue.
J'ai défini dans le webconfig, la base de données sur laquelle sont stockés les informations d'identification ainsi que le provider.
Code:
1 2 3 4 5
| <roleManager enabled="true" defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="sqlServerExpress" applicationName="MonAppli" />
</providers>
</roleManager> |
Ce qui m'a créé ces tables.
Pièce jointe 494692
Ce qui me surprend en écrivant ce post, c'est qu'il y a plus de tables que ce que j'avais hier soir lorsque j'ai capitulé pour la journée.
J'ai, au startup défini une méthode qui m'alimente la table des rôles
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| private void CreateRoles()
{
ApplicationDbContext context = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
IEnumerable<string> roleNameRequiredCollection = new string[] { "Administrateur", "Coach" };
foreach (string roleName in roleNameRequiredCollection)
{
if (!roleManager.RoleExists(roleName))
{
var role = new IdentityRole();
role.Name = roleName;
roleManager.Create(role);
}
}
} |
Ce qui a alimenté la table AspNetRoles
Pièce jointe 494695
J'ai créé l'association Role User
Code:
await UserManager.AddToRoleAsync(user.Id, "Administrateur");
Donc les données dans la db sont les suivantes:
Pièce jointe 494697
Mais lorsque je me connecte avec un compte qui a le rôle Administrateur, je ne rentre pas dans la méthode Edit citée plus haut.
Donc, je ne comprend pas pourquoi, je n'arrive pas à pénétrer dans cette méthode.
Est-ce que je me serais "trompé" dans la définition du RoleManager dans mon WebConfig? Est-ce que c'est la bonne "classe"?
Est-il possible de faire un wrapper qui me permettrait de traquer ce qu'il se passe lors de cette opération de contrôle de rôle?
Je sais qu'il y a une fonction IsInRole(string,string) qui est appelée (c'est ce que j'ai lu lors de mes recherches d'hier soir).
Je vous remercie d'avance pour vos éclaircissements, parce que je me sens désarmé.:(