development

asp.net ID는 로그인 한 사용자의 모든 역할을 가져옵니다.

big-blog 2021. 1. 10. 19:52
반응형

asp.net ID는 로그인 한 사용자의 모든 역할을 가져옵니다.


튜토리얼을 따라 역할 기반 메뉴를 만들었습니다 . 해당 페이지 아래에 다음 코드 줄이 표시됩니다.

String[] roles = Roles.GetRolesForUser();

현재 로그인 한 사용자의 모든 역할을 반환합니다. 새로운 ASP.NET Identity 시스템을 사용하여이 작업을 수행하는 방법이 궁금합니다.

아직 꽤 새롭고 찾을 것이 많지 않습니다.


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

위 솔루션의 확장 방법은 다음과 같습니다.

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

@using System.IdentityModel.Claims 네임 스페이스를 사용하지 마십시오.

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

}

After getting Identity User from SignIn Manager, callGetRolesAsync on UserManager and pass identity user as parameter. It will return of List of roles, identity user enrolled in

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

ReferenceURL : https://stackoverflow.com/questions/21688928/asp-net-identity-get-all-roles-of-logged-in-user

반응형