2011-11-08 2 views
4

의 모든 작업에 대한 [권한 부여 (역할 = "admin"을)] 설정할 수있는 방법 : 내 컨트롤러에있는 모든 액션을 설정하고인가가 난 다음 가지고 MVC 컨트롤러

[Authorize(Roles = "admin")] 

. 그러나 컨트롤러에 대해이 작업을 전 세계적으로 수행 할 수있는 방법이 있습니까?

답변

5
[Authorize(Roles = "admin")] 
public class AdminController : Controller 
{ 
} 

이 속성은 컨트롤러에서도 작동합니다. 당신은 넣을 수 있습니다 [HandleError] :

당신은

[Authorize(Roles = "user")] 
public class BaseController : Controller 
{ 
} 

public class NewsController : BaseController 
{ 
} 

public class ForumController : BaseController 
{ 
    [HttpPost, Authorize(Roles="admin")] 
    public ActionResult Delete(int id) 
    { 
    } 
} 

업데이트

첫 번째 질문도 기본 컨트롤러를 만들고 (모든 파생 컨트롤러에서 동일한 인증을하기 때문에 얻을) 그것의 속성을 설정할 수 있습니다 기본 컨트롤러에서 모든 컨트롤러에서 MVC의 오류 처리를 얻으십시오. 방금 설명했습니다 blog entry.

두 번째 질문 : 예. 가장 구체적인 [Authorize] 속성을 작업에 추가하십시오. (예를 들어 기본 컨트롤러에서 "사용자"를 승인하고 편집 작업에서 "관리자")를 승인합니다.

+0

저는 개인적으로 이런 종류의베이스 컨트롤러가있는 것을 선호합니다. +1 – BigMike

+0

기본 컨트롤러에 다른 무엇을 넣으시겠습니까? 내가 물건을 더 간단하게 만들 기회를 놓치고 있는지 궁금해. –

+0

또 다른 관련 질문입니다. 컨트롤러 클래스 수준에서이 작업을 수행한다고 가정 해 보겠습니다. 그런 다음 "user"및 "admin"과 같은 두 가지 역할이 모두 동일한 작업에 액세스하도록 허용하려는 경우는 어떻습니까? 행동 수준에서 재정의 할 수 있습니까? 어떻게해야합니까? –

1

컨트롤러에 특성을 표시하면 컨트롤러의 모든 동작 방법이 제한됩니다.

1

네, 그 속성을 선언 할 클래스의 맨 위에 놓기 만하면됩니다.

[Authorize(Roles = "admin")] 
public class TheController : Controller 

이렇게

는,이 컨트롤러의 모든 행동은 관리자 역할에 대해 확인됩니다.