usuarios permisos net mvc asp c# asp.net roleprovider

c# - permisos - La función Administrador de funciones no se ha habilitado



roles y permisos asp net (6)

Obtuve la siguiente ProviderException :

La función Administrador de roles no se ha habilitado.

Hasta aquí todo bien.

¿Hay algún lugar al que se pueda llamar para verificar si el Administrador de roles se ha habilitado o no?


Encontré 2 sugerencias en otros lugares a través de Google que sugerían a) asegurarse de que su conexión de DB (la que Roles usa) es correcta y que la clave está escrita correctamente, yb) que el indicador Habilitado en RoleManager está configurado en verdadero. Espero que uno de esos ayude. Lo hizo por mi

¿Intentó 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 uno.


Encontré esta pregunta debido a la excepción mencionada en ella. Mi Web.Config no tenía ninguna etiqueta <roleManager> . 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í, ninguna resolvió completamente el problema.

Dado que estas etiquetas Web.Config se pueden generar automáticamente, se consideró incorrecto resolverlas añadiéndolas manualmente. Si se encuentra en un caso similar, deshaga todos los cambios realizados en Web.Config y en Visual Studio:

  1. Presione Ctrl + Q , escriba nuget y haga clic en "Administrar paquetes NuGet";
  2. Presione Ctrl + E , escriba proveedores y en la lista debe aparecer "Microsoft ASP.NET Universal Providers Core Libraries " y "Microsoft ASP.NET Universal Providers for LocalDB " (ambos creados por Microsoft);
  3. Haga clic en el botón Instalar en ambos y cierre la ventana NuGet;
  4. Verifique su Web.config y ahora debe tener al menos una etiqueta <providers> dentro de Perfil , Membresía , etiquetas de SessionState y también dentro de la nueva etiqueta de 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>

  5. Agregar enabled="true" como tal:

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">

  6. Presione F6 para compilar y ahora debería estar bien proceder a una actualización de la base de datos sin tener esa excepción:

    1. Presione Ctrl + Q , escriba manager , haga clic en "Package Manager Console";
    2. Escriba update-database -verbose y el método Seed se ejecutará correctamente (si no se ha mezclado en otro lugar) y creará algunas tablas en su base de datos;
    3. Presione Ctrl + W + L para abrir el Explorador del servidor y podrá comprobar las Conexiones de datos> Conexión predeterminada> Tablas de las tablas Roles y UsuariosEn Roles entre las tablas recién creadas.

Puede hacerlo leyendo la propiedad booleana en:

System.Web.Security.Roles.Enabled

Esta es una lectura directa del atributo enabled del elemento roleManager en web.config :

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


Actualizar:
Para obtener más información, consulte este ejemplo de MSDN: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx


Si está utilizando ASP.NET Identity UserManager también puede obtenerlo así:

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>());


Si llegó aquí porque está utilizando el nuevo UserManager Identity ASP.NET , lo que realmente está buscando es el RoleManager :

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

roleManager le dará acceso para ver si existe el rol, crear, etc., además de que se creó para el UserManager


<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>