0

Visual Studio 2017을 사용하고 있으며 일부 사용자가 여러 역할을 가지고있는 asp.NET 핵심 MVC 프로젝트가 있습니다. 나는이 역할들 중 하나를 남은 사용자 세션의 유일한 역할로 설정하는 방법이 있는지 궁금합니다. 사용자가 두 개의 역할, NormalUser 및 관리 사용자에 속하고 그들이 NormalUser로 응용 프로그램을 사용하려면사용자가 여러 역할을 수행하는 경우 asp.NET Core MVC에서 나머지 세션에 대해 하나의 역할을 선택하는 방법이 있습니까?

예를 들어, 뭔가 내가 User.IsInRole(nameof(RoleNames.AdminUser)) 같은 역할 검사가 false가 반환되도록 설정할 수 있지만 User.IsInRole(nameof(RoleNames.NormalUser)) 의지 할 수있다 사실을 돌려 주시겠습니까?

프레임 워크에서 이러한 기능을 제공합니까?

+0

역할은 Windows 그룹과 같습니다. Windows에서 "세션 그룹"을 선택할 수 없듯이 MVC에서 "활성 역할"을 선택할 수 없습니다. 역할은 권한을 적용하는 방법 일뿐입니다. 당신이하고자하는 것은 대개 여러 계정을 통해 수행됩니다. –

+0

ID에는 내장 된 것과 같은 것이 없지만 확실히 추가 할 수 있습니다. 세션 기반으로하고 싶다면 토큰에 필드를 추가하고 역 직렬화하거나 db를 변경하고 거기에 저장해야합니다. 'UserSessionRole' 같은 것을 만들고 User 모델에 추가하십시오. – nurdyguy

답변

2

아니요. 사용자가 역할에있는 경우 해당 역할을 수행합니다. 여기에서 가장 중요한 문제는, 당신이 의도하지 않은 목적을 위해 역할을 사용하려고한다는 것입니다. 당신은 "관리자 사용자"는 "일반 사용자"로 사이트를 참조 할 수 있도록하려는 경우, 당신은 단순히 세션에 무언가를 추가 할 수 있습니다 : 다음

Session["ViewAsNormalUser"] = true; 

, 당신은 당신의 검사를 좋아해요 간단하게 할 수 있습니다

if (!User.IsInRole(nameof(RoleNames.AdminUser)) || Session["ViewAsNormalUser"] as bool? == true) 
{ 
    // do normal user thing 
} 
0

현재 세션의 사용자 역할을 선택하려면 다음 중 하나를 수행하십시오.

1- 클레임을 사용하고이 사용자를 관리자 소유권 주장 (예 : 일반 클레임)에 추가 할 수 있습니다. 이것의 장점은 역할 설정은 항상 당신과 함께있을 것입니다 당신이 설정을 변경하려는 경우 RemoveClaimAsync 방법을 사용하여 현재 주장을 제거하고 새로운 주장을 추가 할 수있는 아래의 코드를

await UserManager.AddClaimAsync(user, new Claim("RoleValue", "Admin or Normal")); 

를 참조하십시오.

2 - Chris Pratt은 세션을 사용할 수 있다고 언급했으나 웹 팜의 웹 응용 프로그램에서 끈끈한 세션 사교성과 같은 세션을 사용하려는 경우 고려해야 할 사항이 있습니다.

이 문서 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state#session-state

내가 그 도움을 희망을 찾을 수 있습니다.