6

사용자가 액세스 권한이없는 엔터티에 사용자가 액세스하지 못하도록 컨트롤러 동작을 보호하려고합니다. 다음 코드를 사용하여이 작업을 수행 할 수 있습니다.매개 변수 값을 활용하는 컨트롤러에 대해 Custom AuthorizeAttribute를 사용하는 방법은 무엇입니까?

public ActionResult Entity(string entityCode) 
{ 
    if (CurrentUser.VerifyEntityPermission(entityCode)) 
    { 
     //populate viewModel... 
     return View(viewModel); 
    } 
    return RedirectToAction("NoAccessToEntity", "Error"); 
} 

컨트롤러 동작 자체에 특성을 추가하고 싶습니다. 엔터티에 대한 액세스를 확인하려면 컨트롤러에 전달 된 값과 사용자가 액세스 할 수있는 엔터티를 확인해야합니다. 이것이 가능한가?

[EntityAuthRequired] 
public ActionResult Entity(string entityCode) 
{ 
     //populate viewModel... 
     return View(viewModel); 
} 
+0

어떻게했는지 – Dragon

답변

3

이런 식으로하면 도움이 될 것입니다. entityCode 매개 변수를 하드 코딩하지 않고 각 액션에 지정할 수 있도록 속성에 몇 가지 추가 속성을 추가 할 수 있습니다. entityCode이 당신으로 RouteData에없는 경우

public class EntityAuthRequired : FilterAttribute, IAuthorizationFilter 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //Make sure that this is not NULL before assigning value as string... 
     var entityCode = filterContext.RouteData.Values["entityCode"] as string; 
     // do your logic...   
     if (!allowed) 
      filterContext.Result = new HttpUnauthorizedResult();    
    } 
} 

또한, 당신은 POST 데이터를보고 filterContext.RequestContext.HttpContext.Request를 사용할 수 있습니다.

+0

Authorizeattribute.and 및 AuthorizeRequest 메서드에서 컨트롤러 포스트 json 값을 얻는 방법 – Dragon

관련 문제