De functie Rolbeheer is niet ingeschakeld

Heb de volgende ProviderException:

De functie Rolbeheer is niet ingeschakeld.

Tot nu toe gaat het goed.

Is er ergens een methode die kan worden aangeroepen om te controleren of de rolmanager is ingeschakeld of niet?


Antwoord 1, autoriteit 100%

U kunt dit doen door te lezen van de booleaanse eigenschap op:

System.Web.Security.Roles.Enabled

Dit is een directe lezing van het enabledattribuut van het roleManagerelement in de web.config:

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

Bijwerken:
Bekijk voor meer informatie dit MSDN-voorbeeld: https: //msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx


Antwoord 2, autoriteit 17%

Als je hier bent terechtgekomen omdat je de nieuwe ASP.NETIdentityUserManagergebruikt, ben je eigenlijk op zoek naar de roleManager:

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

roleManagergeeft je toegang om te zien of de rol bestaat, aan te maken, enz., plus het is gemaakt voor de UserManager


Antwoord 3, autoriteit 4%

Ik heb elders via Google 2 suggesties gevonden die suggereerden a) ervoor te zorgen dat uw db-connectionstring (degene die Roles gebruikt) correct is en dat de sleutel ervoor correct is gespeld, en b) dat de vlag Ingeschakeld op RoleManager is ingesteld naar waar. Hoop dat een van die helpt. Het deed het voor mij.

Heb je geprobeerd Roles.Enabled aan te vinken? U kunt ook Roles.Providers controleren om te zien hoeveel providers beschikbaar zijn en u kunt de Roles.Provider controleren voor de standaardprovider. Als het null is, is er geen.


Antwoord 4, autoriteit 3%

Ik vond deze vraag vanwege de daarin genoemde uitzondering. Mijn Web.Config had geen <roleManager>-tag. Ik realiseerde me dat zelfs als ik het zou toevoegen (zoals Infotekka suggereerde), het eindigde in een database-uitzondering. Na het volgen van de suggesties in de andere antwoorden hier, heeft geen ervan het probleem volledig opgelost.

Aangezien deze Web.Config-tags automatisch kunnen worden gegenereerd, voelde het verkeerd om ze op te lossen door ze handmatig toe te voegen. Als u zich in een soortgelijk geval bevindt, maakt u alle wijzigingen ongedaan die u in Web.Config en in Visual Studio hebt aangebracht:

  1. Druk op Ctrl+Q, typ nugeten klik op “NuGet-pakketten beheren”;
  2. Druk op Ctrl+E, typ providersen in de lijst zou het moeten verschijnen “Microsoft ASP.NET Universal Providers Core Bibliotheken” en “Microsoft ASP.NET Universal Providers for LocalDB” (beide gemaakt door Microsoft);
  3. Klik in beide op de knop Installeren en sluit het NuGet-venster;
  4. Controleer uw Web.config en nu zou u ten minste één <providers>-tag moeten hebben in Profiel, Lidmaatschap, SessionState-tags en ook in de nieuwe RoleManager-tag, zoals deze:

    <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. Voeg enabled="true"toe zoals:

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
    
  6. Druk op F6om te bouwen en nu zou het OK moeten zijn om door te gaan naar een database-update zonder die uitzondering:

    1. Druk op Ctrl+Q, typ manager, klik op “Pakketbeheerconsole”;
    2. Typ update-database -verboseen de Seed-methode werkt prima (als je niet ergens anders hebt geknoeid) en maak een paar tabellen in je database;
    3. Druk op Ctrl+W+Lom de Server Explorer te openen en u zou in staat moeten zijn om Data Connections > Standaardverbinding > Tabellende tabellen Rolesen UsersInRolesonder de nieuw gemaakte tabellen!

Antwoord 5, autoriteit 2%

Als u ASP.NET Identity UserManagergebruikt, kunt u dit ook als volgt verkrijgen:

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());

Als je de sleutel voor de gebruiker hebt gewijzigd van bijvoorbeeld Guid naar Int, gebruik dan deze code:

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

Antwoord 6

<roleManager
  enabled="true"
  cacheRolesInCookie="false"
  cookieName=".ASPXROLES"
  cookieTimeout="30"
  cookiePath="/"
  cookieRequireSSL="false"
  cookieSlidingExpiration="true"
  cookieProtection="All"
  defaultProvider="AspNetSqlRoleProvider"
  createPersistentCookie="false"
  maxCachedResults="25">
  <providers>
    <clear />
    <add
       connectionStringName="MembershipConnection"
       applicationName="Mvc3"
       name="AspNetSqlRoleProvider"
       type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <add
       applicationName="Mvc3"
       name="AspNetWindowsTokenRoleProvider"
       type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>

Antwoord 7

Hier is de code die u in uw accountcontroller in MVC5 en hoger moet invoeren
om de lijst met rollen van een gebruiker te krijgen:

csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}

Het is niet nodig om Roles.GetRolesForUser()te gebruiken en de functie Rolbeheer in te schakelen.

Other episodes