Estoy trabajando en un sitio ASP.Net MVC 3. La vista principal _Layout contiene un menú y quiero ocultar algunos de los elementos del menú en base a si se ha identificado y qué funciones que se encuentre.ASP.Net MVC Ocultar/Mostrar elementos del menú según la seguridad
Esto funciona actualmente utilizando un código como éste
@if (HttpContext.Current.User.Identity.IsAuthenticated)
{
<li id="MyLearningTab">@Html.ActionLink("My Learning", "MyLearning", "Learning")</li>
if (HttpContext.Current.User.IsInRole("Reporters"))
{
<li id="ReportTab">@Html.ActionLink("Reports", "Index", "Reports")</li>
}
if (HttpContext.Current.User.IsInRole("Administrators"))
{
<li id="DashboardTab">@Html.ActionLink("Dashboard", "Dashboard", "Admin")</li>
<li id="AdminTab">@Html.ActionLink("Admin", "Index", "Admin")</li>
}
}
me gustaría refactorizar esto en algo más legible y se acercó con algo como esto
@if ((bool)ViewData["MenuMyLearning"]){<li id="MyLearningTab">@Html.ActionLink("My Learning", "MyLearning", "Learning")</li> }
@if((bool)ViewData["MenuReports"]){<li id="ReportTab">@Html.ActionLink("Reports", "Index", "Reports")</li>}
@if ((bool)ViewData["MenuDashboard"]){<li id="DashboardTab">@Html.ActionLink("Dashboard", "Dashboard", "Admin")</li>}
@if ((bool)ViewData["MenuAdmin"]){<li id="AdminTab">@Html.ActionLink("Admin", "Index", "Admin")</li>}
originalmente añade lo siguiente a mi base de pensamiento controlador constructor pude configurar el ViewData para estas propiedades allí
ViewData["MenuDashboard"] = User != null && User.Identity.IsAuthenticated && User.IsInRole("Administrators");
ViewData["MenuAdmin"] = User != null && User.Identity.IsAuthenticated && User.IsInRole("Administrators");
ViewData["MenuReports"] = User != null && User.Identity.IsAuthenticated && User.IsInRole("Reportors");
ViewData["MenuMyLearning"] = User != null && User.Identity.IsAuthenticated;
Sin embargo, resulta que el objeto Usuario es nulo en este momento en el ciclo de vida. También intenté crear un filtro global personalizado, pero ViewData no es accesible.
¿Cuál es la forma recomendada de hacer algo como esto? ¿Debería dejarlo como estaba al principio con todo el código HttpContext en la vista?
Aquí hay otra solución http://stackoverflow.com/questions/17012643/role -based-navigation –