2012-10-03 2 views
4

나는 역할로 사용자를 필터링해야하지만 모든 사용자가이 개 역할하나의 역할 만 일치하는지 확인하는 방법은 무엇입니까?

예에 속한다 : Admin 한 사용자에 대한 Group1User과 기타를위한 Group1.

이제 Group1 역할로 필터링하고 AdminUser 역할을 무시하고 싶습니다.

public ViewResult Index() 
{ 
    string[] roles = Roles.GetRolesForUser(); 
    var group = string.Join(" ", roles); 
    group = group.Replace("Admin", "");//Used this to single out Group1 from Admin user 
    return View(new UserViewModel 
        { 
         Users = _userService.FindAll().Where(x => Roles.GetRolesForUser(x.UserName).Contains(group)), 
         Roles = roles 
        }); 
} 

이것은 오류가 아니지만 비어있는 것으로 표시됩니다. 나는 ... 나는 이유를 알고 있지만 여전히 주위에 이동하는 방법을 알아낼 수 있다고 생각

대신이 방법을 사용하려는 것 정말 소리
+0

Roles.GetRolesForUser (x.UserName) - 어떤 형식입니까? – Sruti

+0

'string []'죄송합니다. – rexdefuror

+0

컴파일 오류처럼 보입니다. 배열에 포함하면 매개 변수로 배열을 사용하지 않습니다! – Sruti

답변

2
public ViewResult Index() 
{ 
    var roleFilter = Roles.GetRolesForUser().First(r => !r.equals("Admin")); 

    return View(new UserViewModel 
       { 
        Users = _userService.FindAll().Where(x => Roles.GetRolesForUser(x.UserName).Contains(roleFilter)), 
        Roles = new [] {roleFilter} 
       }); 
} 
+0

그게 효과가있을 거라는 걸 알았지 만, 예를 들어 'Group1'은 동적 인 것으로 써야한다. 매번 같음 – rexdefuror

+0

역할 필터를 결정하는 논리는 무엇입니까? 게시글의 색인 작업 방법에 전달할 것입니까? – tranceporter

+0

Errm .. "논리"가 많지는 않지만 질문을 살펴보십시오. 당신이 그것을 부끄럽게 생각하지만 "롤 필터"가되어야하는 메소드의 시작 부분에 문자열이있는 것을 보게 될 것입니다.> _> – rexdefuror

2

좋아, 여기 간다. 귀하의 문제에 대한 나의 이해는 사용자가 하나 이상의 특정 역할을 갖고 있는지 확인하고자하는 것입니다. 그렇다면 액세스를 허용하십시오. 그렇지 않으면 액세스를 거부하고 블랙홀로 보냅니다. 귀하의 예에서 하나의 특정 역할 만 점검하고자하는 것처럼 들립니다. 댓글 중 일부를 읽으면 어느 시점에 여러 역할을 확인할 수도 있습니다. 코드 예제를 통해 사용자가 페이지에 액세스하기 위해 할당되어야하는 하나 이상의 역할 집합에 대해 사용자를 확인할 수 있습니다.

여기에 필요한 모든 역할의 목록을 가져 와서 사용자가 할당 한 모든 역할을 빼는 것입니다. 뺄셈 후에 목록에 남아있는 역할이 있으면 사용자에게 필요한 모든 역할이있는 것은 아닙니다. 다음은 몇 가지 예입니다. 권한 부여에 필요한 역할은 빼기 기호 왼쪽에 있으며 사용자의 할당 된 역할은 위 코드와 마찬가지로 빼기 기호 오른쪽에 있습니다.

사용자는 굉장하고 팬케이크이므로 액세스가 허용됩니다. 사용자가 요구 사항을 충족한다는 의미의 빈 세트가 생성됩니다.

{ "Awesome", "Pancake" } - { "Awesome", "Pancake" } = { } 

사용자는 팬케이크 일뿐입니다. 액세스가 허용되지 않습니다. 결과 세트는 그들이 "최고"역할 누락 의미하므로 "신난다"이 포함되어

{ "Awesome", "Pancake" } - { "Pancake" } = { "Awesome" } 

이 사용자는 최고 또는 팬케이크 아니라 그녀는 admin입니다. 이 사용자가 액세스 거부되도록 아직도, 우리는 페이지를 입력하기 위해 멋진 팬케이크를 필요로 : 당신은 질문이있는 경우

{ "Awesome", "Pancake" } - { "Admin" } = { "Awesome", "Pancake" } 

을하거나 당신이 원하는없는 댓글을 남겨주세요. 필요한 경우 추가로 도와 드리겠습니다.

+0

죄송합니다. 시간대가 다르기 때문에 자고있었습니다. 그것을 시도 할 것입니다. – rexdefuror

+0

OK! tranceporters 솔루션은 정확히 내가 필요로하는 것이었지만, 당신의 (무의식적으로) 다른 부분으로 다른 문제를 해결했습니다! 그래서 + 그리고 감사합니다 !!! :디 – rexdefuror

관련 문제