web-dev-qa-db-fra.com

La fonctionnalité du gestionnaire de rôles n'a pas été activée.

Vous avez le suivant ProviderException :

La fonctionnalité du gestionnaire de rôles n'a pas été activée.

Jusqu'ici 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?

190
gsharp

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

System.Web.Security.Roles.Enabled

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

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


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

296
Infotekka

Si vous êtes arrivé ici parce que vous utilisez le nouveau ASP.NETIdentityUserManager, vous recherchez réellement le RoleManager:

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

roleManager vous permettra de savoir si le rôle existe, de créer, etc., en plus de le créer pour le UserManager

51
Serj Sagan

J'ai trouvé 2 suggestions ailleurs via Google suggérant a) de s'assurer que votre chaîne de connexion db (celle utilisée par Roles) est correcte et que sa clé est orthographiée correctement, et b) que l'indicateur Enabled sur RoleManager est défini sur true. J'espère que l'un de ces aide. Ça l'a fait pour moi.

Avez-vous essayé de vérifier Roles.Enabled? En outre, vous pouvez vérifier le rôle de Roles.Providers pour connaître le nombre de fournisseurs disponibles, ainsi que le rôle du fournisseur par défaut dans Roles.Provider. Si c'est nul alors il n'y en a pas.

11
Wade

J'ai trouvé cette question en raison de l'exception mentionnée. Mon Web.Config n'avait pas de balise <roleManager>. J'ai réalisé que même si je l'ai ajouté (comme 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 données ici, aucune n’a totalement résolu le problème.

Étant donné que ces balises Web.Config peuvent être générées automatiquement, il a été erroné de les résoudre en les ajoutant manuellement. Si vous vous trouvez dans un cas similaire, annulez toutes les modifications apportées à Web.Config et à Visual Studio:

  1. Presse Ctrl+Q, tapez nuget et cliquez sur "Gérer les paquets NuGet";
  2. Presse Ctrl+E, tapez fournisseurs et dans la liste, il devrait apparaître "Fournisseurs universels Microsoft ASP.NET Bibliothèques principales "et" Fournisseurs universels Microsoft ASP.NET pour LocalDB "(tous deux créés par Microsoft);
  3. Cliquez sur le bouton Installer dans les deux et fermez la fenêtre de NuGet;
  4. Vérifiez votre configuration Web et vous devriez maintenant avoir au moins une balise <providers> à l'intérieur Profil , Appartenance , balises SessionState et également à l'intérieur de la nouvelle balise 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 suit:

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

    1. Presse Ctrl+Q, tapez manager , cliquez sur "Console du gestionnaire de packages";
    2. Tapez update-database -verbose et la méthode Seed fonctionnera correctement (si vous n’avez pas mal joué ailleurs) et créez quelques tables dans votre base de données;
    3. Presse Ctrl+W+L pour ouvrir l’explorateur de serveurs, vous devez être en mesure d’enregistrer les connexions de données> DefaultConnection> tables les rôles et UsersInRoles tables parmi les tables nouvellement créées!
8
CPHPython

Si vous utilisez ASP.NET Identity UserManager, vous pouvez aussi l'obtenir:

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

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

Si vous avez changé de clé pour utilisateur de Guid en Int, par exemple, utilisez ce code:

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