asp.net identidad obtener todos los roles de usuario conectado


Creé un menú basado en roles para el que seguí este tutorial. Algunos donde abajo de 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 ASP.NET ¿Sistema de identidad?

Todavía es bastante nuevo y no hay mucho que encontrar al respecto.

Author: marc_s, 2014-02-11

3 answers

Controller.User.Identity es un ClaimsIdentity. Puede obtener una lista de roles inspeccionando las notificaciones...

var roles = ((ClaimsIdentity)User.Identity).Claims
                .Where(c => c.Type == ClaimTypes.Role)
                .Select(c => c.Value);

--- actualizar ---

Desglosándolo 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();
 81
Author: Anthony Chu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-11 17:03:15

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();
    }
 9
Author: LawMan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-05 20:48:52

No uses @using System.IdentityModel.Espacio de nombres, En lugar de usar

@usando el sistema.Seguridad.Reclamaciones

    @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";

}
 1
Author: Abdul Rahim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-09 12:59:17