Obtuve la siguiente excepción de proveedor :
La función Administrador de roles no se ha habilitado.
Hasta aquí todo bien.
¿Existe algún método al que se pueda llamar para verificar si Role Manager se ha habilitado o no?
Obtuve la siguiente excepción de proveedor :
La función Administrador de roles no se ha habilitado.
Hasta aquí todo bien.
¿Existe algún método al que se pueda llamar para verificar si Role Manager se ha habilitado o no?
Respuestas:
Puede hacerlo leyendo la propiedad booleana en:
System.Web.Security.Roles.Enabled
Esta es una lectura directa del enabled
atributo del roleManager
elemento en web.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Actualización:
para obtener más información, consulte esta muestra de MSDN: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
roleManager
está habilitado. Pero ahora recibo una excepciónUnable to connect to SQL Server database
Si llegaste aquí porque estás usando lo nuevo ASP.NET
Identity
UserManager
, lo que realmente estás buscando es RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
le dará acceso para ver si el rol existe, crear, etc., además se crea para el UserManager
Encontré 2 sugerencias en otro lugar a través de Google que sugerían a) asegurarse de que su cadena de conexiones db (la que Roles está usando) es correcta y que la clave está escrita correctamente, yb) que el indicador Habilitado en RoleManager está establecido en verdadero. Espero que una de esas ayudas. Lo hizo por mi.
¿Intentaste comprobar Roles.Enabled? Además, puede verificar Roles.Providers para ver cuántos proveedores están disponibles y puede verificar Roles.Provider para el proveedor predeterminado. Si es nulo, entonces no hay ninguno.
Encontré esta pregunta debido a la excepción mencionada en ella. Mi Web.Config no tenía ninguna <roleManager>
etiqueta. Me di cuenta de que incluso si lo agregué (como sugirió Infotekka ), terminó en una excepción de base de datos. Después de seguir las sugerencias en las otras respuestas aquí, ninguno resolvió completamente el problema.
Dado que estas etiquetas Web.Config se pueden generar automáticamente, se sintió mal resolverlas agregándolas manualmente. Si se encuentra en un caso similar, deshaga todos los cambios que realizó en Web.Config y en Visual Studio:
Verifique su Web.config y ahora debe tener al menos una <providers>
etiqueta dentro de las etiquetas Perfil , Membresía , Estado de sesión y también dentro de la nueva etiqueta RoleManager , como esta:
<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>
Añadir enabled="true"
así:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
prensa F6 para construir y ahora debería estar bien continuar con una actualización de la base de datos sin tener esa excepción:
update-database -verbose
y el método de Seed funcionarán bien (si no has jugado en otro lugar) y crearán algunas tablas en tu Base de Datos;Si está utilizando ASP.NET Identity UserManager
, puede obtenerlo así también:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Si ha cambiado la clave para el usuario de Guid a Int, por ejemplo, use este código:
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>
Aquí está el código que debe poner en su controlador de cuenta en MVC5 y más adelante para obtener la lista de roles de un usuario:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
No hay necesidad de usar Roles.GetRolesForUser()
y habilitar la función Role Manager.
web.config
? Traté de ponerloApplication_Start
y diceThis method can only be called during the application's pre-start initialization phase.