Ottenuta la seguente ProviderException :
La funzione Gestione ruoli non è stata abilitata.
Fin qui tutto bene.
Esiste un metodo che può essere chiamato per verificare se il Role Manager è stato abilitato o meno?
Ottenuta la seguente ProviderException :
La funzione Gestione ruoli non è stata abilitata.
Fin qui tutto bene.
Esiste un metodo che può essere chiamato per verificare se il Role Manager è stato abilitato o meno?
Risposte:
Puoi farlo leggendo dalla proprietà booleana su:
System.Web.Security.Roles.Enabled
Questa è una lettura diretta dal enabled
attributo roleManager
elemento nel web.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Aggiornamento:
per ulteriori informazioni, consulta questo esempio MSDN: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
roleManager
è abilitato. Ma ora sto ricevendo un'eccezioneUnable to connect to SQL Server database
Se sei arrivato qui perché stai usando il nuovo ASP.NET
Identity
UserManager
, quello che stai effettivamente cercando è il RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
ti darà accesso per vedere se il ruolo esiste, creare, ecc., inoltre è stato creato per UserManager
Ho trovato 2 suggerimenti altrove su Google che hanno suggerito a) assicurandomi che la tua stringa di connessione db (quella che sta usando Roles) sia corretta e che la chiave sia scritta correttamente eb) 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 Roles.Providers per vedere quanti provider sono disponibili e puoi controllare Roles.Provider per il provider predefinito. Se è nullo, non ce n'è uno.
Ho trovato questa domanda a causa dell'eccezione menzionata. Il mio Web.Config non aveva alcun <roleManager>
tag. Mi sono reso conto che anche se l'ho aggiunto (come suggerito da Infotekka ), è finito con un'eccezione del 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, non è stato corretto risolverli aggiungendoli manualmente. Se ti trovi in un caso simile, annulla tutte le modifiche apportate a Web.Config e in Visual Studio:
Controlla il tuo Web.config e ora dovresti avere almeno un <providers>
tag all'interno dei tag Profile , Membership , SessionState e anche all'interno del nuovo tag RoleManager , 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>
Aggiungi enabled="true"
così:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Premi F6per compilare e ora dovrebbe essere OK procedere ad un aggiornamento del database senza quell'eccezione:
update-database -verbose
e il metodo Seed funzionerà perfettamente (se non hai fatto casino altrove) e creerà alcune tabelle nel tuo Database;Se lo stai usando ASP.NET Identity UserManager
puoi ottenerlo anche in questo modo:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Se hai modificato la chiave per l'utente da Guid a Int, ad esempio, utilizza questo codice:
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
<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>
Ecco il codice che devi inserire nel tuo Controller account in MVC5 e versioni successive per ottenere l'elenco dei ruoli di un utente:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Non è necessario utilizzare Roles.GetRolesForUser()
e abilitare la funzione Gestione ruoli.
web.config
? Ho provato a inserirloApplication_Start
e diceThis method can only be called during the application's pre-start initialization phase.