Подтвердить что ты не робот

Идентификатор asp.net получает все роли зарегистрированных пользователей

Я создал меню, основанное на роли, для которого я выполнил этот учебник. Некоторые, где на этой странице вы увидите эту строку кода:

String[] roles = Roles.GetRolesForUser();

Он возвращает все роли текущего пользователя. Мне было интересно, как это сделать с новой системой идентификации ASP.NET?

Это все еще довольно новое, и об этом мало что можно найти.

4b9b3361

Ответ 1

Controller.User.Identity является ClaimsIdentity. Вы можете получить список ролей, проверив претензии...

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

--- обновление ---

Прервать его немного больше...

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

Ответ 2

Здесь используется метод расширения вышеупомянутого решения.

    public static List<string> Roles(this ClaimsIdentity identity)
    {
        return identity.Claims
                       .Where(c => c.Type == ClaimTypes.Role)
                       .Select(c => c.Value)
                       .ToList();
    }

Ответ 3

Не используйте @using System.IdentityModel.Claims namespace, вместо этого используйте

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

}

Ответ 4

Получив Identity User из SignIn Manager, вызовите GetRolesAsync в UserManager и передайте идентификационный пользователь в качестве параметра. Будет возвращен список ролей, идентифицированных пользователем, зарегистрированным в

var rolesList = await userManager.GetRolesAsync(identityuser).ConfigureAwait(false);