198 votes

La fonction Role Manager n'a pas été activée

J'ai obtenu ce qui suit ProviderException :

La fonction Role Manager n'a pas été activée.

Jusqu'à présent, tout va bien.

Existe-t-il une méthode qui peut être appelée pour vérifier si le gestionnaire de rôles a été activé ou non ?

306voto

Infotekka Points 4668

Vous pouvez le faire en lisant la propriété booléenne à :

System.Web.Security.Roles.Enabled

C'est une lecture directe de la enabled de l'attribut roleManager dans l'élément web.config :

<configuration>
  <system.web>
    <roleManager enabled="true" />
  </system.web>
</configuration>

Mise à jour :
Pour plus d'informations, consultez cet échantillon MSDN : https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx

1 votes

Comment puis-je faire cela à partir du code au lieu de web.config ? J'ai essayé de le mettre dans Application_Start et il est dit This method can only be called during the application's pre-start initialization phase.

1 votes

Où cela va-t-il dans le web.config ?

0 votes

<configuration> <system.web> <roleManager /> </system.web> </configuration>.

53voto

Serj Sagan Points 2731

Si tu es venu ici parce que tu utilises le nouveau ASP.NET Identity UserManager ce que vous cherchez en fait, c'est l'adresse suivante RoleManager :

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

roleManager vous donnera l'accès pour voir si le rôle existe, le créer, etc, de plus il est créé pour l'utilisateur. UserManager

74 votes

Qu'est-ce que l'enfant de 3 ans a à voir avec tout ça ? J'ai été dirigé vers ce post depuis Google parce que j'avais un problème avec la mise en place de l'identité. Puisque j'ai trouvé la solution... la prochaine personne confrontée au même problème que moi et qui sera amenée ici par Google saura quoi faire...

2 votes

De plus, l'Identity UserManager dispose d'une fonctionnalité utile pour obtenir les rôles d'un utilisateur donné : UserManager.GetRolesAsync(User.Identity.GetUserId()) ;

0 votes

Où mettre var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())) ; ?

11voto

Wade Points 146

J'ai trouvé deux suggestions ailleurs via Google qui suggèrent a) de s'assurer que la chaîne de connexion de votre base de données (celle que Roles utilise) est correcte et que la clé est correctement orthographiée, et b) que l'indicateur Enabled de RoleManager est défini sur true. J'espère que l'un de ces éléments vous aidera. C'est le cas pour moi.

Avez-vous essayé de vérifier Roles.Enabled ? Vous pouvez également vérifier Roles.Providers pour voir combien de fournisseurs sont disponibles et vous pouvez vérifier Roles.Provider pour le fournisseur par défaut. S'il est nul, il n'y en a pas.

0 votes

Merci pour votre réponse. Mais ce n'est pas ce que je veux. Je veux une méthode qui vérifie si la fonction Role Manager est activée ou non, sans mettre en cache la ProviderException à cette fin.

8voto

Ogglas Points 1

Si vous utilisez ASP.NET Identity UserManager vous pouvez l'obtenir comme ça aussi :

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

var roles = userManager.GetRoles(User.Identity.GetUserId());

Si vous avez changé la clé de l'utilisateur de Guid à Int par exemple, utilisez ce code :

var roles = userManager.GetRoles(User.Identity.GetUserId<int>());

7voto

CPHPython Points 2219

J'ai trouvé cette question en raison de l'exception qui y est mentionnée. Mon Web.Config n'avait pas de <roleManager> tag. J'ai réalisé que même si je l'ajoutais (en tant que Infotekka a suggéré ), il s'est retrouvé dans une exception de base de données. Après avoir suivi les suggestions des autres réponses ici, aucune n'a permis de résoudre complètement le problème.

Étant donné que ces balises Web.Config peuvent être générées automatiquement, il ne semblait pas opportun de résoudre le problème en les ajoutant manuellement. Si vous êtes dans un cas similaire, annulez toutes les modifications que vous avez apportées à Web.Config et dans Visual Studio :

  1. Pulse Ctrl + Q , type nuget et cliquez sur "Manage NuGet Packages" ;

  2. Pulse Ctrl + E , type fournisseurs et dans la liste, il devrait apparaître "Microsoft ASP.NET Universal Providers". Bibliothèques principales "et "Microsoft ASP.NET Universal Providers pour LocalDB "(tous deux créés par Microsoft) ;

  3. Cliquez sur le bouton Installer dans les deux cas et fermez la fenêtre NuGet ;

  4. Vérifiez votre Web.config et maintenant vous devriez avoir au moins un <providers> étiquette à l'intérieur Profil , Adhésion , SessionState ainsi que dans les nouvelles balises RoleManager comme ceci :

    <roleManager defaultProvider="DefaultRoleProvider">
        <providers>
           <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" />
        </providers>
    </roleManager>
  5. Ajouter enabled="true" comme ça :

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
  6. Pulse F6 à Build et maintenant il devrait être OK pour procéder à une mise à jour de la base de données sans avoir cette exception :

    1. Pulse Ctrl + Q , type manager cliquez sur "Package Manager Console" ;
    2. Type update-database -verbose et la méthode Seed fonctionnera parfaitement (si vous ne vous êtes pas trompé ailleurs) et créera quelques tables dans votre base de données ;
    3. Pulse Ctrl + W + L pour ouvrir l'explorateur de serveur et vous devriez être en mesure de vérifier dans Connexions de données > DefaultConnection > Tables le site Rôles y UsersInRoles parmi les tables nouvellement créées !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X