framework - asp.net identity tutorial español
ASP.NET 5 MVC 6 Identidad 3 Grupos de reclamaciones de roles (3)
Actualmente estoy buscando una solución para usar una administración avanzada de permisos de roles / grupos en ASP .NET 5 MVC 6 con Identity 3. Comencé un nuevo proyecto de Preview Starter Web con un sistema de inicio de sesión integrado y sencillo.
Ahora necesito una "administración de permisos de usuarios" compleja con las siguientes funciones:
- Los usuarios pueden estar en múltiples grupos / roles
- un grupo / rol tiene muchos objetos de acceso (por ejemplo, CanAccessUser, CanEditUser ...)
- estos objetos de acceso (¿tal vez reclamaciones?) de cada grupo / roles se complementan entre sí
- (opcional para la solución definitiva): adicionalmente, un grupo puede asignar los objetos de acceso (tal vez las notificaciones) a un usuario de forma independiente
He visto que la identidad ya me proporciona una estructura de tabla adecuada para mí. (por ejemplo, AspNetUsers, AspNetUserRoles, AspNetRoles, AspNetRoleClaims),
Pero me falta un buen ejemplo / documentación para usarlos.
Para MVC 5, utilicé este ejemplo: los usuarios tienen muchos grupos, un grupo puede tener muchos roles (los roles son los objetos de acceso en el código fuente para las clases / funciones) Identidad de ASP.NET 2.0: Implementación de la administración de permisos basada en grupos
Para estos requisitos ya existe un ejemplo práctico de que no es necesario reinventar la rueda.
Estábamos en el mismo barco aquí, sin mucha lectura aparte de la fuente, por supuesto ...
Terminamos implementando políticas. Las políticas son un grupo de Reclamaciones que se requieren para que la autorización se cumpla. Estas políticas se pueden aplicar a los controladores.
Puede definir sus políticas en Startup.cs, ConfigureServices:
services.AddAuthorization(options =>
{
options.AddPolicy("SalesSenior", policy =>
{
policy.RequireClaim("department", "sales");
policy.RequireClaim("status", "senior");
});
});
Definimos Roles, les asignamos 1 o más Reclamaciones y asignamos Roles a los Usuarios, lo que permite verificarlos con la Política correspondiente al golpear un Controlador.
Puede inyectar el IAuthorizationService
en un controlador o atributo como tal:
public class SalesDashboardController: Controller
{
private readonly IAuthorizationService _authz;
public VarianceOverviewController(IAuthorizationService authz)
{
_authz = authz;
}
...
}
Luego puede usar el IAuthorizationService
de IAuthorizationService
para verificar la validez de las reclamaciones de los usuarios ...
if (await _authz.AuthorizeAsync(User, "SalesSenior"))
{
// User is authorized
}
Este artículo fue mi fuente principal de estas cosas y fue un excelente manual para mí. ¡Buena suerte!
Este hilo me ayudó a que algo funcionara, pero es triste que esto no esté mejor documentado.
Aquí están mis intentos de mejorar eso. Asp.net.Identity (3.0.0.0-rc1-final)
en Startup.cs -> ConfigurationServices
//Define your policies here, they are strings associated with claims types, that have claim strings...
//they need to be in AspNetUserClaims table, user id, department, Dev to be allowed access to the Dev policy
//add the auth option, below that makes it work, and in the api controller, add the
//[Authorize("Dev")] attribute
services.AddAuthorization(
options =>
{
options.AddPolicy("Dev", policy => { policy.RequireClaim("department", "Dev"); });
});
services.AddMvc();
Si está buscando un proyecto de muestra, no hay muchos por ahí en este momento. El primer lugar para buscar es en las páginas de proyectos de GitHub de aspnet .
Afortunadamente, el subproyecto de identidad de ASP.NET tiene un proyecto de muestra que puede ver here , sin embargo, es posible que no cubra todos sus requisitos. Tenga en cuenta que esto está utilizando la última versión beta.