문제

ASP.NET MVC에서 기본 [Authorize] 동작을 무시할 수있는 방법/방법이 궁금했습니다. 나는 새로운 액션 필터를 만들고 내 자신의 속성을 만들 수 있다는 것을 알고 있습니다. 단순히 [승인] 행동을 변경하고 그 작업을 내 코드로 바꿀 수 있다면 단지 관심이 있습니까?

편집하다: 남자와 여자. 나는 당신의 의견에 감사하지만 내가 쓴 것처럼 ~ 아니다 새로운 [xyzauthorize] 속성을 소개하려고합니다. 나는 이것을하는 방법을 알고 있습니다. [승인] 표기법을 유지하고 있지만 작동 방식을 변경하고 싶습니다.

도움이 되었습니까?

해결책

예, AwricizeatTribute의 MSDN 문서를 살펴보십시오. http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx.

기본적으로 onauthorization () 메소드를 무시하고 동작을 사용자 정의 할 수 있습니다. 속성에는 다른 가상 메소드도 있습니다.

편집 : Bruno가 지적했듯이 AutherizeCore () 메소드를 무시할 수 있습니다. 주요 차이점은 authorizecore ()가 httpcontextbase를 사용하고 onauthorization ()는 AuthorizationContext를 취한다는 것입니다. AuthorizationContext의 인스턴스는 컨트롤러, RequestContext 및 Routedata와 같은 자세한 정보를 제공합니다. 또한 ActionResult를 지정할 수 있습니다.

AuthorizeCore ()는 액세스 할 수있는 정보와 반환 할 수있는 결과에 더 제한되어 있지만 캐시 된 데이터를 승인 해야하는 경우 논리가 추가 데이터가없는 경우를 처리해야합니다 ( 요청이 MVC 파이프 라인을 통해 라우팅되기 전에 캐시에서 데이터가 제공되므로).

언제나 그렇듯이 시나리오와 사용 가능한 도구와 그 사이의 트레이드 오프를 이해해야합니다.

다른 팁

AutherizeAttribute 필터를 서브 클래스하고 자신의 논리를 그 안에 넣을 수 있습니다.

예를 보자. 항상 로컬 연결을 승인하고 싶다고 가정 해 봅시다. 그러나 원격 연결 인 경우 일반적인 승인 논리를 유지하고 싶습니다.

당신은 다음과 같은 일을 할 수 있습니다.

public class LocalPermittedAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return (httpContext.Request.IsLocal || base.AuthorizeCore(httpContext)));
        }
}

또는 항상 특정 원격 주소 (예 : 기계)를 승인 할 수 있습니다.

그게 다야!

편집 : 언급을 잊어 버렸습니다. AutherizeAttribute 필터를 사용하는 것과 동일하게 사용합니다.

class MyController : Controller
{
    [LocalPermittedAuthorize]
    public ActionResult Fire()
    {
        Missile.Fire(Datetime.Now);
    }
}

자신의 역할 제공 업체를 구현하고 앱을 사용하도록 설정하십시오. 그런 다음 인증 속성은 Athorization 코드를 존중합니다.

나는 두 가지 방법 만 본다 : 재정의 AuthorizeAttribute.OnAuthorization 메소드 또는 자신만의 승인 속성 생성.

1) 매우 쉬운 :

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        /// your behavior here
    }
}

2) 쉬운 - ASP.NET MVC 소스를보십시오. Authorizeattribute.cs 파일

평소와 같이 사용자 정의 필터를 구현할 수 있으며 (원하는 경우 승인 조정을 상속받은 다음 상속하는 새로운 ActionInvoker를 만들 수 있습니다. ControlLerActionInVoker GetFilters를 무시합니다. GetFilters에서는 전화합니다 base.GetFilters() 필터 목록을 얻으려면 인증 필터를 통해 반복하고 권한 부호로의 통화를 사용자 정의 필터에 대한 호출로 바꾸십시오.

또 다른 잠재적 인 방법은 원하는대로 사용자 정의 멤버십 및 역할 공급자를 구현하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top