Sto lavorando su un sito ASP.Net MVC 3. La vista maestro _Layout contiene un menu e voglio nascondere alcune delle voci del menu in base se si è connessi e quali ruoli si sono a.ASP.Net MVC Nascondi/Mostra voci di menu in base alla sicurezza
Questo funziona attualmente utilizzando il codice come questo
@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>
}
}
mi piacerebbe refactoring questo in qualcosa di più leggibile e si avvicinò con qualcosa di simile
@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>}
originariamente ho aggiunto il seguente alla mia base di pensiero costruttore di controllo ho potuto impostare il Viewdata per queste proprietà là
012.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;
Tuttavia, l'oggetto Utente è nullo a questo punto del ciclo di vita. Ho anche provato a creare un filtro globale personalizzato ma il ViewData non è quindi accessibile.
Qual è il modo consigliato di fare qualcosa del genere? Dovrei semplicemente lasciarlo com'era all'inizio con tutto il codice HttpContext nella vista?
Ecco un'altra soluzione http://stackoverflow.com/questions/17012643/role -based-navigation –