2011-08-10 3 views
8

Authorize 특성을 사용하면 리소스에 대한 액세스가 허용되는 역할을 지정할 수 있습니다. 나는뿐만 아니라ASP.NET 권한 부여 특성 및 관리자 사용자 역할

[Authorize(Roles="User, Administrator")] 

이 하나를 지정해야하는 모든 자원에 갈 허용 관리 사용자가 될 수 있지만 경우

[Authorize(Roles="User")] 

는하지만 관리자가 허용 어떻게 든 말할 수있는 몇 가지 방법이있다 어디서나이 속성을 Authorize 속성에 지정하지 않습니까?

컨트롤러에있는 코드 (또는)의 어딘가가 [Authorize(Roles="User")]이면 관리자 역할도 허용됩니다.

또는 모두 설정할 수 있습니다. 역할이 응용 프로그램 시작시 동적으로 권한을 부여 하시겠습니까?

아이디어가 있으십니까?

업데이트 : 그래서 내가 더 나은 해결책을 찾지 못한 경우도있다 "Administrator"를 추가해야합니다 권한 부여가 [Authorize(Role="Administrator")] 속성과 내가 속성 [Authorize(Role="User")] 일부 다른 컨트롤러에서 일부 작업을 함께

은 현재 내가 하나의 관리 컨트롤러가 .

+0

내 도움이 되었습니까? – LeftyX

답변

2

나는 이것이 당신에게 도움이 될 것이라고 생각합니다. AuthorizeAttribute를 사용하여 자신의 기본 컨트롤러를 만든 다음 다른 컨트롤러가 기본 클래스를 상속 받도록하십시오.

[Authorize(Roles="Admin")] 
public class MyFancyController : Controller 
{ 
} 

[Authorize(Roles = "TaxPayer")] 
public class WizardController : MyFancyController 
{ 
... 

제 의견으로는 이것은 무섭습니다.

몇 개의 컨트롤러/액션이 있습니까? 나중에 잊어 버리고 관리자가 액세스하지 못하도록하려는 페이지가 있으면 어떨까요?

코드를 디버깅하는 것이 더 어려워 집니까?

+0

나는 어딘가에 관리 액세스를 원하지 않는다면 좋은 지적이라고 생각합니다. 질문 업데이트 됨 – Joper

1

사용자 정의 필터를 생성하고이를 사용하여 액션 또는 컨트롤러를 꾸밀 수 있습니다. '관리'에 있는지 사용자합니다 here

2
[Authorize(Roles = "User, Admin")] 
public class PrestamosController : Controller 
{ 
    // controller details 
} 
+0

게시 한 코드를 설명해 주시면 더 좋습니다. –

0

이 내가 할 것입니다

public class AuthorizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
      filterContext.Result = new HttpUnauthorizedResult(); 
      return; 
     } 

     var actionName = filterContext.ActionDescriptor.ActionName; 
     var controllerName = filterContext.Controller.GetType().Name; 

     bool isAuthorized =false; 

     // Put your logic here !!!! 

     if (!isAuthorized) { 
      filterContext.Result = new HttpUnauthorizedResult();   
      return; 
     } 
    } 
} 

당신은 몇 가지 자세한 내용을보실 수 있습니다 : 이것은 내가 꽤 많이 사용했습니다 간단한 구조 역할 또한 "사용자"역할에 있습니다.

0

정적 역할런타임 역할의 개념이 필요합니다.| 관리자 :

귀하의 역할 목록과 수준 :

  • 역할 다음은 간단한 예입니다 수준 : 1
  • 역할 : 편집기 | 수준 : 2
  • 역할 : 뷰어 | 레벨 : 3

사용자와 사용자의 정적 역할 (정적 역할이 사용자에게 할당 된 역할) :

  • 사용자 : 존 | 역할 : 관리자
  • 사용자 : Sam | 역할 : 편집자
  • 사용자 : Peter | 역할 : 뷰어

정적 역할 및 역할 수준을 사용하여 런타임 역할을 생성하면 상위 수준의 역할을 가진 사용자가 자동으로 낮은 수준의 역할을 얻습니다. 따라서 계산 후 이들 사용자의 실행 시간 역할은 다음과 같습니다.

  • 사용자 : John | 역할 : 관리자, 편집기, 뷰어
  • 사용자 : Sam | 역할 : 편집자, 뷰어
  • 사용자 : Peter | 역할 : 뷰어

[Authorize (Roles = "Viewer")]를 사용하면 상위 수준의 권한 (예 : John, Sam)의 사용자도 액세스 할 수 있습니다. 왜냐하면 런타임에 뷰어 역할도 가져야하기 때문입니다.

정적 역할 및 런타임 역할 사용의 요점은 정적 역할이 역할 할당을 쉽게한다는 것입니다. 그리고 Run time role은 리소스 인증을보다 쉽게 ​​만듭니다.

관련 문제