2012-03-23 5 views
5

У меня есть требование в моем приложении MVC представить пользователю другое представление о действии, основанном на их роли. Каков наилучший способ сделать это?MVC - представление переключателя на основе роли пользователя

В настоящее время у меня есть следующий код, который мне не нравится:

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

Смежные вопросы