관리자 작업의 컨트롤러 클래스 또는 기본 컨트롤러 클래스로 작업을 이동하는 것이 좋습니다. 그렇게하면 각 작업 방법 대신 컨트롤러 클래스에 Authorize
및 AdminLayout
속성을 설정하기 만하면됩니다. 인증 및 일부 사용자 지정 레이아웃 논리를 결합 특성을 갖는
는
[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 클래스가없는 것입니다.
다니엘 감사합니다. – hofnarwillie