2013-04-09 4 views
0

사용자가 있으며 한 사용자에게 하나 이상의 역할을 할당 할 수 있습니다. 나는 예를 들어, 페이지의 특정 역할을 확인하려면 :ASP.Net 여러 역할에 대한 역할의 사용자에 대한 역할 및 구성원 확인

Role1, Role2, Role3, Role4, Role5

Page1.aspx라는에 액세스 할 수 있습니다 Role2와 Role3의 액세스 권한 및 사용자 액세스 할 수있는 사용자 또한 경우

사용자 역할 1과 역할 2는 또한 역할 2가 있기 때문에 액세스 할 수 있습니다. I는 멤버십을 구현

문자열 [] = 역할 Roles.GetRolesForUser (User.Identity.Name)의 도움으로 사용자의 역할 문자열 배열의 목록을 가지고있다

;

여러 역할을 확인하려면 어떻게해야합니까? Roles.IsUserInRole 함수를 사용하여 하나씩 확인해야합니까?

나는 사용했다; 파트너가 자본으로 인해 0을 반환합니다. 어떻게하면 무시할 수 있습니까? 그리고 배열은 배열에 대해 검사하는 것이 옳은가?

string[] userroles = { "Partner", "testsetsr" }; 
string[] requiredroles = { "contractor", "customer", "sims", "nonclientau", "partner" }; 
     var countInRoles = userroles.Intersect(requiredroles).Count(); 

답변

0

독자적인 Authorization Filter Attribure를 구현해야합니다. 이를 수행하려면 'AuthorizationAttribute'를 확장하는 클래스를 만든 다음 OnAuthorization을 재정 의하여 필요한 역할 확인을 지정할 수 있습니다.

수행하는 방법에 대한 작은 예는 그 here in Nimesh's .Net Blog

예는 개인 문제에 대한 해결책이 아니다 겠지만, 당신이 무엇을해야하는지에 대한 아이디어를 제공해야합니다.

편집 : 응용 프로그램 역할 공급자도 마찬가지이며 IsUserInRole을 재정의하거나 새 메서드를 추가하는 것이 좋습니다. 그러면 Roles.IsUserInRole이 원하는 방식으로 작동하도록 필요한 검사를 제공 할 수 있습니다. . 당신의 두번째 질문에

: 당신이 개 배열을 가지고 첫번째 배열의 많은 회원이 제 2의 구성원 당신이 할 수있는 경우를 무시하면서 얼마나 계산하려면 그 반면에 LINQ

var countInRoles = userroles.Select(u => u.ToLower()).Count(u => requiredroles.Select(r => r.ToLower()).Contains(u)); 

를 사용하여 , 어떤 동작에 액세스하는 데 필요한 역할 목록이있는 경우 목록을 사용하여 사용자가 linq (대소 문자 무시 함)를 사용하여 필요한 모든 역할을 수행했는지 확인할 수도 있습니다. (다시 대소 문자 무시)

string[] requiredroles = { "Partner", "testsetsr" }; 
string[] userroles = { "contractor", "testsetsr", "customer", "sims", "nonclientau", "partner" }; 
var userHasAllRequiredRoles = requiredroles.Select(r => r.ToLower()).All(r => userroles.Select(u => u.ToLower()).Contains(r));