Tôi đang làm việc trên trang web ASP.Net MVC 3. Quan điểm chủ _Layout chứa một menu và tôi muốn để ẩn một số mục trong menu dựa trên nếu bạn đã đăng nhập và những gì vai trò bạn đang ở.ASP.Net MVC Ẩn/Hiển thị các mục menu Dựa trên An ninh
này hiện đang hoạt động sử dụng mã như thế này
@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>
}
}
tôi muốn refactor này trong một cái gì đó dễ đọc hơn và đã đưa ra một cái gì đó như thế này
@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>}
tôi ban đầu thêm dòng sau vào cơ sở điều khiển constructor suy nghĩ của tôi, tôi có thể thiết lập các ViewData cho các đặc tính này có
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;
Tuy nhiên, đối tượng người dùng không có giá trị tại thời điểm này trong vòng đời. Tôi cũng đã cố gắng tạo một bộ lọc tùy chỉnh toàn cục nhưng không thể truy cập vào ViewData.
Cách được khuyến nghị thực hiện như thế này là gì? Tôi có nên để nó như thế nào trước tiên với tất cả mã HttpContext trong khung nhìn không?
Đây là một giải pháp khác http://stackoverflow.com/questions/17012643/role dựa trên điều hướng –