2012-11-19 3 views
1

내 MVC 응용 프로그램에서 WIF를 사용하여 클레임 기반 권한을 적용하고있는 고객을 삭제하는 컨트롤러 작업이 있습니다.ClaimsPrincipalPermissionAttribute를 사용하여 SecurityException을 잡는 방법은 무엇입니까?

문제점 : 누군가가 액세스 권한이없는 경우 브라우저에서 예외가 표시됩니다 (stacktrace를 사용하여 완료).하지만 리디렉션하는 것이 좋습니다.

이 작동 나를 리디렉션 할 수 있습니다 :

public ActionResult Delete(int id) 
{ 
    try 
    { 
     ClaimsPrincipalPermission.CheckAccess("Customer", "Delete"); 
     _supplier.Delete(id); 
     return RedirectToAction("List"); 
    } 
    catch (SecurityException ex) 
    { 
     return RedirectToAction("NotAuthorized", "Account"); 
    } 
} 

이 작동하지만 (사용자가 권한이없는 경우) 잡는 방법을 모른다는 SecurityException가 발생합니다 :

[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "Delete", Resource =  "Customer")] 
public ActionResult Delete(int id) 
{ 
    _supplier.Delete(id); 
    return RedirectToAction("List"); 
} 

I을 선언적 접근 방식을 사용하고 있지만 승인되지 않은 요청을 처리하는 방법을 모르고 있습니다. 어떤 제안?

답변

1

HandleError 특성을 사용할 수 있습니다. 현재의 사용량을 확인할 수 있습니다 : ASP.Net MVC Preview 4 release

을 본질적으로, 당신은는 handleError 속성을 사용하여 삭제 ActionResult 장식이 같은 잡을 수있는 예외 유형 및 표시하는보기를 지정 할 수 있어야한다 :

[HandleError(ExceptionType = typeof(SecurityException), View = "UnauthorizedView")] 

물론 UnauthorizedView를 만들어야합니다. 보기를 지정하지 않으면 표준 오류보기가 표시됩니다 (공유보기 폴더에 있음)

관련 문제