IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Problème avec l'attriburt Authorize qui bloque tout [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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 m'a créé ces tables.

    Nom : 2019-07-31_081322.jpg
Affichages : 72
Taille : 46,7 Ko
    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 : 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);
                    }
                }
            }
    Ce qui a alimenté la table AspNetRoles
    Nom : 2019-07-31_082215.jpg
Affichages : 81
Taille : 16,0 Ko

    J'ai créé l'association Role User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    await UserManager.AddToRoleAsync(user.Id, "Administrateur");
    Donc les données dans la db sont les suivantes:
    Nom : 2019-07-31_082554.jpg
Affichages : 71
Taille : 51,6 Ko

    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é.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par touftouf57 Voir le message
    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.
    En fait tu as mélange 2 systemes de gestion des identites. Il y a l'ancien (le tres ancien meme) ASP.NET Membership, qui permet une gestion des identites uniquement basee sur les roles. Ce sont les tables prefixees par aspnet_. Je ne suis pas sur que ca soit toujours maintenu.

    Pour gerer les problematiques actuelles et offrir plus de souplesse, Microsoft a sorti ASP.NET Identity qui permet non seulement d'utiliser des roles, mais aussi des claims. Ce sont les autres tables qui commencent par AspNet.

    Je te conseille de repartir de zero avec ASP.NET Identity uniquement, car Membership souffre de nombreux defauts de conception et n'est plus mis a jour depuis 2017.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Merci,

    effectivement en mélangeant 2 systèmes différents cela ne pouvait pas fonctionner.
    J'ai retiré tout ce qui faisait référence à Asp.net membership et cela fonctionne.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Message Windows Security Alert qui bloque tout le PC
    Par pottiez dans le forum Sécurité
    Réponses: 15
    Dernier message: 21/10/2009, 16h34
  2. un % qui bloque tout mon code!
    Par kaking dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 20/07/2009, 09h06
  3. Problème avec 2 threads : l'un bloque l'autre
    Par pontus21 dans le forum Linux
    Réponses: 13
    Dernier message: 17/01/2008, 13h09
  4. [SQL 2K5]Process Sleeping qui bloque tout
    Par elsuket dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/09/2007, 11h52
  5. Réponses: 6
    Dernier message: 11/09/2006, 20h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo