2014-07-10 1 views
0

어떻게 그 문제를 해결할 수 있을지 모르겠습니다. 간단히 말해서, 저는 응용 분야 프로젝트에서 제 지역에 별도의 회원권을 갖고 싶습니다. 그러나이 "분리 된"회원은 "기본"회원과 동일한 데이터베이스를 사용해야합니다.MVC 영역 별도 멤버쉽

내 주요 프로젝트에서 나는 SimpleMembershipProvider을 사용합니다.

예 : 나는 주요 프로젝트의 컨트롤러와 뷰 모두에서 HttpContext.User.Identity와 그에 대한 정보를 얻을 수 있습니다 http://example.com의 "정상적인"사용자 loggin에가

- 그는 단지 기록됩니다. 그러나 영역 (http://example.com/special)을 입력하면 HttpContext.User.Identity은 해당 영역에서 null을 반환해야합니다. 즉, 사용자는 "기록되지 않음"입니다.

반면에 "특별"사용자가 http://example.com/special을 입력하고 성공적으로 로그인하면 그는 주 응용 프로그램 (해당 영역에서만)을 제외한 모든 special 영역에 대해 승인을 받았습니다. 메인 프로젝트에서 그는 "기록되지 않은"상태입니다 - 로그인해야합니다 ("정상적인"역할을 가진 사용자와 함께).

두통없이 어떻게 해결할 수 있습니까?

+3

역할 사용! 각 영역에 대한 역할을 한 다음 해당 영역의 각 컨트롤러에서'[Authorize (Roles = "ThisArea")]'를 실행하면됩니다. 그런 다음 몇 가지 맞춤 속성과 필터를 만들 수 있습니다! –

답변

0

당신이 설명하는 것은 역할 기반 보안을위한 교과서 사용 사례입니다.

사용자에게 역할을 할당하고 해당 역할의 구성원 자격을 기반으로 영역에 대한 액세스 권한을 부여합니다. 따라서 관리자 역할을 만들고 관리자 역할을 가진 사용자에게 관리자 섹션에만 액세스 권한을 부여하십시오. 이는 [Authorize (Roles = "Administrators")] 속성을 사용하여 쉽게 수행 할 수 있습니다.

응용 프로그램에서 역할을 사용하여 볼 수있는 필드 또는 편집 할 수있는 필드를 정의 할 수도 있습니다. User.IsInRole("Administrators")을 통해 역할에 대한 액세스를 확인하는 코드를 추가하고 편집 또는보기 필드 주위에 조건부 논리를 추가합니다.