2010-10-06 10 views

risposta

273

È possibile farlo attraverso la lettura dalla proprietà booleana a:

System.Web.Security.Roles.Enabled 

Si tratta di una lettura diretta dall'attributo enabled dell'elemento roleManager nella web.config:

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


Aggiornamento:
Per ulteriori informazioni, consultare questo esempio MSDN : https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx

+0

come posso fare questo da codice invece di 'web.config'? Ho provato a metterlo in 'Application_Start' e dice' Questo metodo può essere chiamato solo durante la fase di inizializzazione pre-avvio dell'applicazione. – Maslow

+0

Dove va in web.config? –

+0

\t \t \t \t Infotekka

11

Ho trovato 2 suggerimenti altrove tramite Google che suggerivano a) assicurandoti che il tuo db connectiontring (quello che Roles sta usando) sia corretto e che la chiave sia scritta correttamente, e b) che il flag Enabled su RoleManager sia impostato su true. Spero che uno di questi aiuti. Lo ha fatto per me.

Hai provato a controllare Roles.Enabled? Inoltre, puoi controllare i ruoli.Provider per vedere quanti provider sono disponibili e puoi controllare i ruoli.Provider per il provider predefinito. Se è nullo, non ce n'è uno.

+0

Grazie per la risposta. Ma non è quello che voglio. Desidero un metodo che controlli se la funzione Gestore ruolo è abilitata o meno, senza memorizzare nella cache ProviderException a tale scopo. – gsharp

44

Se è arrivato qui perché si sta utilizzando la nuova ASP.NETIdentityUserManager, cosa si sta effettivamente cercando è la RoleManager:

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

roleManager vi darà accesso per vedere se esiste il ruolo , creare, ecc., in più è stato creato per il UserManager

+2

non proprio il post ha già 3 anni ;-) – gsharp

+63

Cosa c'entra il bambino di 3 anni? Sono stato indirizzato a questo post da Google perché avevo a che fare con un problema relativo all'identificazione di Identity. Da quando l'ho capito ... la prossima persona che si occupa dello stesso problema di me che viene portato qui da Google saprà cosa fare ... –

+0

Inoltre, Identity UserManager ha una funzione utile per ottenere ruoli per l'utente dato: UserManager.GetRolesAsync (User.Identity.GetUserId()); – keithl8041

7

Ho trovato questa domanda a causa dell'eccezione menzionata in esso. My Web.Config non ha alcun tag <roleManager>. Mi sono reso conto che anche se l'ho aggiunto (come Infotekka suggested), è finito in un'eccezione Database. Dopo aver seguito i suggerimenti nelle altre risposte qui, nessuno ha risolto completamente il problema.

Poiché questi tag Web.Config possono essere generati automaticamente, è stato sbagliato risolverlo aggiungendoli manualmente. Se ci si trova in un caso simile, annullare tutte le modifiche apportate al Web.Config e in Visual Studio:

  1. Press Ctrl +Q, tipo NuGet e cliccare su "Gestione pacchetti Nuget" ;
  2. Press Ctrl +E, tipo fornitori e nella lista dovrebbe apparire "Fornitori di Microsoft ASP.NET universali librerie core" e "Microsoft ASP.Provider NET universali per LocalDB "(entrambi creati da Microsoft);
  3. Fare clic sul pulsante Installa in ciascuno di essi e chiudere la finestra NuGet;
  4. Controlla il tuo web.config e ora si dovrebbe avere almeno un <providers> tag all'interno Profilo, appartenenza, SessionState tag e anche all'interno del nuovo RoleManager tag, in questo modo:

    <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. Aggiungere enabled="true" in questo modo:

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true"> 
    
  6. Press F6 a costruire e ora dovrebbe essere OK per procedere ad un aggiornamento del database senza avere tale eccezione:

    1. Press Ctrl + Q, tipo manager, fare clic su "Package Manager Console";
    2. Digitare il update-database -verbose e il metodo Seed funzionerà correttamente (se non si è incasinato altrove) e creare alcune tabelle nel database;
    3. Press Ctrl + W + L per aprire Esplora server e si dovrebbe essere in grado di controllare in connessioni dati> DefaultConnection> Tavoli le Ruoli e UsersInRoles tavoli tra le tabelle appena create !
+1

"_Quando i campi Web.Config vengono generati automaticamente_" Questo non è completamente corretto. Mentre molti pacchetti NuGet regolano automaticamente i file di configurazione, non vi è alcuna regola che richieda loro di farlo. –

+0

@KevinR. grazie Kevin, ho appena riformulato quella parte. – CPHPython

4

Se si utilizza ASP.NET Identity UserManager si può ottenere in questo modo così:

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

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

Se la chiave è stata modificata per l'utente da Guid a Int ad esempio di questo codice:

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

Questo ha funzionato per me. Per favore, dì perché, se stai votando. – Ogglas

+0

non funziona perché è necessario eseguire il cast di id utente su int tale che: userManager.GetRoles (Convert.ToInt32 (User.Identity.GetUserId ())); – toy

+0

@toy No, otterrà il valore come int. Non c'è bisogno di convertire. Ovviamente per farlo funzionare la chiave di identità deve essere int. – Ogglas

-1
<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> 
Problemi correlati