2012-03-23 4 views
5

MVC 응용 프로그램에 사용자의 역할에 따라 다른 동작보기를 제공해야한다는 요구 사항이 있습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 현재MVC - 사용자 역할을 기준으로보기 전환

I가 내가 좋아하지 않는 다음 코드를

if (HttpContext.User.IsInRole("Admin")) 
    return View("Details.Admin", model); 
else if (HttpContext.User.IsInRole("Power")) 
    return View("Details.Power", model); 

//default 
return View("Details", model); 

이는 액션 필터에 적합한 수 있을까요?

답변

6

이 필터는 액션 필터에 적합합니까?

물론 :

public class MyActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var result = filterContext.Result as ViewResultBase; 
     if (result != null) 
     { 
      var user = filterContext.HttpContext.User; 
      if (user.IsInRole("Admin")) 
      { 
       result.ViewName = string.Format("{0}.Admin", filterContext.ActionDescriptor.ActionName); 
      } 
      else if (user.IsInRole("Power")) 
      { 
       result.ViewName = string.Format("{0}.Power", filterContext.ActionDescriptor.ActionName); 
      } 
     } 
    } 
} 

아니면 심지어 사용자 정의보기 엔진을 만들 수있다.

+0

뷰 엔진 생성을 보증하기에 충분한 인스턴스가 있다고는 생각하지 않지만 액션 필터 접근 방식이 아마도 좋을 것이라고 생각했습니다. 대린 감사합니다. – Dismissile

관련 문제