2010-07-29 2 views
0

배경 : MVC2를 완전히 새로 도입했습니다. C# 경험이 있지만 제한된 웹 경험이 있습니다.세분화 된 권한 부여 및 MVC2에 대한 질문

단순히 역할을 사용자에게 할당하는 것보다 세분화 된 액세스가 필요합니다. 사용자는 트리의 0 점 이상에서 역할을 수행 할 수 있습니다.

/ 
    /Europe 
    /England 
    /France 
    /USA 

예를 들어, 사용자는 "유럽"아래의 모든 포럼의 사회자 일 수 있으며 프랑스의 뉴스 게시자가 될 수 있습니다.

두 예 컨트롤러는 다음과 같은 작업이 있습니다

ForumController :

public ActionResult DeletePost(int id) { ... } 

NewsController가 :

[HttpPost] 
public ActionResult Post(int treeID, ...) { ... } 

어떻게이 문제를 접근해야합니까? 내가 수집 한 것에서 Membership + RoleProvider는이 수준의 세분화 된 제어를 수행 할 수 없습니다. 이전에이 모든 것을 지원하는 사용자 지정 사용자/역할/인증 시스템을 작성했지만 LoginView와 같은 "표준"컨트롤과 호환되지 않았습니다.

NewsAdmin

  • 뉴스

  • 편집 뉴스

  • 삭제 뉴스

에게 추가

목표는 그래서 같은 액세스를 허용하는 역할을하는 것입니다 사용자가이 -access 그가 게시하려고 "뉴스를 추가"합니까 :

NewsPoster

  • 은 확인해야합니다 뉴스 CONTROLER의 사후 조치를 따라서 뉴스를

을 추가 하시겠습니까?

실제로이 속성을 사용하여 지정하는 것이 좋으므로 실제 조치 코드는 더 명확하고 호출자에게는 적절한 액세스가 있다고 가정합니다.

희망 사항은 이해가 되길 바라며, 어디에서 읽을지를 알 수 있습니다.

(오, 나는이 질문이 이전에 몇 가지 변종으로 대답되어 왔음을 확신합니다. 나는 그것을 찾지 못했을 것입니다. 만약 당신이 그들에게 도움이된다고 생각한다면, 나는 단일 링크 답장을 신경 쓰지 않을 것입니다. 읽기)

답변

0

나는 당신이 너무 빨리 역할 공급자를 해고하고 있다고 생각합니다. 사용자가 NewsAdmin_Europe_AddNews이라는 역할을 수행하면 질문에 거의 답할 수 있습니다. 그렇지 않습니까?

인증 스키마를 역할 공급자와 함께 사용하게되면이를 MVC에 묶어야합니다. 하위 유형 AuthorizeAttributeAuthorizeCore을 재정의하십시오. 경고 : 여기서 작성한 코드는 스레드로부터 안전하고 재 입력해야합니다.base.AuthorizeCore을 호출 한 다음 URI/쿼리를 기반으로 특정 역할을 테스트합니다.이 값은 MVC를 모두 우회하여 캐시에서 제공 할 수 있으므로 경로 값을 얻지 못합니다.

이것은 약간의 작업이지만 멤버십을 재발 명하려는 것보다 결국 안전 할 것입니다.

+0

NewsAdmin_Europe_AddNews와 비슷한 것을 사용했지만 NewsAdmin 역할에 "DeleteComments"액세스를 쉽게 추가 할 수 없습니다. 대신에 NewsAdmin_ % s_DeleteComments를 생성해야합니다. – Thomas

+0

그들은 서로 다른 역할을합니다. 권한 당 하나의 역할을 사용하십시오. 역할 공급자는이 아이디어를 바탕으로합니다. 명확히하기 : 당신에게 "NewsAdmin"은 역할입니다. 괜찮 았지만 "NewsAdmin_Europe_DeleteComments"와는 다른 역할을합니다. 이는 공급자에게 중요한 것입니다. 제공자의 역할 개념에는 역할을 고려한 것과 권한을 고려한 것이 모두 포함됩니다. –

+0

당신은 완전합니다. 나에게 NewsAdmin은 역할이고 "추가, 편집 등"은 해당 역할을 구성하는 별도의 권한입니다. 개념적으로 역할 공급자 개념은 잘, unsalable 및 unmaintainable 보인다. (나는 잘하면 틀리다.). 실제 응용 프로그램에서 "NewsAdmin_Europe_ *"역할을 가진 모든 사용자에게 "NewsAdmin_Europe_DeleteComments"역할을 추가하는 방법은 무엇입니까? 또 다른 문제는 X, Y, Z에 "NewsAdmin"을 넣는 것보다 유럽의 각 잎에 대해 4 가지 역할을 UI가 혼란스럽게하는 것입니다. 시간 내 주셔서 감사합니다. – Thomas

관련 문제