Bonjour,
Je ne comprend pas comment fonctionne la gestion des Roles.
Voici une action que je ne veux autoriser qu'aux administrateurs.
Mais lorsque je me connecte avec un compte ayant le rôle administrateur, je n'atteins pas la page prévue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [Authorize(Roles ="Administrateur")] public ActionResult Edit(int id)
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.
Ce qui m'a créé ces tables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 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
Ce qui a alimenté la table AspNetRoles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } } }
J'ai créé l'association Role User
Donc les données dans la db sont les suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part await UserManager.AddToRoleAsync(user.Id, "Administrateur");
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é.![]()
Partager