c# - usuarios - permisos asp net
La identidad de asp.net obtiene todos los roles de usuario registrado. (3)
Creé un menú basado en roles para el cual seguí this tutorial. Algunos en esa página verás esta línea de código:
String[] roles = Roles.GetRolesForUser();
Devuelve todos los roles del usuario actualmente conectado. Me preguntaba cómo lograr esto con el nuevo sistema de identidad ASP.NET.
Todavía es bastante nuevo y no hay mucho que encontrar al respecto.
Aquí hay un método de extensión de la solución anterior.
public static List<string> Roles(this ClaimsIdentity identity)
{
return identity.Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value)
.ToList();
}
No use @ use System.IdentityModel.Claims namespace, en lugar de ese uso
@Usando System.Security.Claims
@using System.Security.Claims
@using Microsoft.AspNet.Identity
@{
var claimsIdentity = User.Identity as System.Security.Claims.ClaimsIdentity;
var customUserClaim = claimsIdentity != null ? claimsIdentity.Claims.FirstOrDefault(x => x.Type == "cutomType") : null;
var customTypeValue= customUserClaim != null ? customUserClaim .Value : User.Identity.GetUserName();
var roleOfUser = claimsIdentity != null ? claimsIdentity.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role).Value :"User";
}
Controller.User.Identity
es una ClaimsIdentity
. Puede obtener una lista de roles inspeccionando las reclamaciones ...
var roles = ((ClaimsIdentity)User.Identity).Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value);
--- actualización ---
Romperlo un poco más ...
using System.Security.Claims;
// ........
var userIdentity = (ClaimsIdentity)User.Identity;
var claims = userIdentity.Claims;
var roleClaimType = userIdentity.RoleClaimType;
var roles = claims.Where(c => c.Type == ClaimTypes.Role).ToList();
// or...
var roles = claims.Where(c => c.Type == roleClaimType).ToList();