2012-03-23 20 views
5

Ho un requisito nella mia applicazione MVC per presentare all'utente una vista diversa di un'azione in base al loro ruolo. Qual è il modo migliore per farlo?MVC - Cambia visualizzazione in base al ruolo utente

Attualmente ho il seguente codice, che non mi piace:

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); 

Questa sarebbe una buona misura per un filtro d'azione?

risposta

6

Questo dovrebbe essere adatto per un filtro di azione?

Assolutamente:

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); 
      } 
     } 
    } 
} 

Oppure si potrebbe anche costruire un motore di visualizzazione personalizzata.

+0

Non penso di avere sufficienti istanze di ciò che si verifica per garantire la creazione di un motore di visualizzazione, ma pensavo che l'approccio del filtro azione sarebbe probabilmente buono. Grazie, Darin – Dismissile

Problemi correlati