1

내 모든 "admin"액션에서 사용할 수있는 속성 클래스를 작성하고 모든 액션/인증 필터를 해당 액션에 효과적으로 적용합니다. 예를 들어, 항상 AuthoriseAttribute과 사용자 정의 AdminLayoutAttribute을 적용하므로 내 의도는 위의 두 가지를 모두 의미하는 AdminAttribute 일뿐입니다. 그렇게하면 전체 Admin 섹션을 편리하게 변경할 수 있습니다.MVC3 : 액션 필터 그룹화 또는 다른 액션 필터에서 액션 필터 호출

그러나 어떻게 할 수 있는지 알 수 없습니다. 어느 누구도 올바른 방향으로 나를 가리킬 수 있습니까?

매우 감사드립니다.

답변

3

관리자 작업의 컨트롤러 클래스 또는 기본 컨트롤러 클래스로 작업을 이동하는 것이 좋습니다. 그렇게하면 각 작업 방법 대신 컨트롤러 클래스에 AuthorizeAdminLayout 속성을 설정하기 만하면됩니다. 인증 및 일부 사용자 지정 레이아웃 논리를 결합 특성을 갖는

[Authorize] 
[AdminLayout] 
public AdminController: Controller 
{ 
    //action methods 
} 

단일 책임 원칙의 휴식으로 볼 수 있지만, 당신은 다른 선택의 여지가없는 경우 당신은 이러한 접근 방법을 시도 할 수 :

당신이 만약을 기존 AdminLayoutAttribute을 새로운 AdminAttribute으로 바꾸려면 AdminAttribute을 생성하여 AuthorizeAttribute 표준을 상속하고 사용자 지정 AdminLayoutAttribute와 마찬가지로 IActionFilter \ IResultFilter를 구현할 수 있습니다.

public class AdminLayoutAttribute: AuthorizeAttribute, IActionFilter, IResultFilter 
{ 
    //Logic as in existing AdminLayoutAttribute to be replaced 
} 

그렇지 않으면 당신은 당신이 AdminLayoutAttribute 기존 유지하고 AuthorizeAttribute와 결합 새로운 AdminAttribute을 추가하려는 경우, 당신은 사용자 정의 속성에서 상속 형 AuthorizationFilter의 내부 인스턴스를 호출하여 IAuthorizationFilter을 구현할 수

public class AdminLayoutAttribute: AdminLayoutAttribute, IAuthorizationFilter 
{ 
    //Implement IAuthorizationFilter by delegating to an internal AuthorizeFilter instance 
    private _authorizeFilter = new AuthorizeAttribute(); 

    public override object TypeId 
    { 
     //override from base Attribute class as in AuthorizeAttribute class 
     get { return _authorizeFilter.TypeId ; } 
    } 

    public string Roles 
    { 
     get { return _authorizeFilter.Roles; } 
     set { _authorizeFilter.Roles = value; } 
    } 

    public string Users 
    { 
     get { return _authorizeFilter.Users; } 
     set { _authorizeFilter.Users = value; } 
    } 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     _authorizeFilter.OnAuthorization(filterContext); 
    } 

} 

두 가지 옵션의 키는 C#에서 다중 상속을 지원하지 않으므로 두 개의 구체적인 클래스에서 상속하는 새 AdminAttribute 클래스가없는 것입니다.

+0

다니엘 감사합니다. – hofnarwillie