![](/img/trans.png)
[英]How to make dynamic menu based on role in nested master page asp.net mvc 4?
[英]Building an ASP.NET MVC Master Page Menu Dynamically, Based on the current User's “Role”
我見過一些類似的問題,但沒有一個看起來像我正在嘗試做的事情。
這是我當前的實施,沒有任何安全性:
<div id="menucontainer">
<ul id="menu">
<li><%= Html.ActionLink("Main List", "Index", "AController")%></li>
<li><%= Html.ActionLink("Product List", "Index", "BController")%></li>
<li><%= Html.ActionLink("Company List", "Index", "CController")%></li>
<li><%= Html.ActionLink("User List", "Index", "DController")%></li>
</ul>
</div>
這很好,以上工作。 我在Actions for CController和DController上設置[授權]屬性以防止未經授權的訪問 - 但是我想從菜單中刪除那些沒有正確角色的用戶,因為當他們看到它並點擊時在它上面它告訴他們他們沒有許可,他們會想要它。 如果他們不知道那里,那對所有參與者來說都更好......
這樣的事情最終是我想要達到的目標,但我正在尋找更多MVC風味的方法,其中“視圖”是“愚蠢的”:
<div id="menucontainer">
<ul id="menu">
<li><%= Html.ActionLink("Main List", "Index", "AController")%></li>
<li><%= Html.ActionLink("Product List", "Index", "BController")%></li>
<% If(Role = Roles.Admin) { %>
<li><%= Html.ActionLink("Company List", "Index", "CController")%></li>
<li><%= Html.ActionLink("User List", "Index", "DController")%></li>
<% } %>
</ul>
</div>
我做過這樣的事情:
像這樣的東西:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// build list of menu items based on user's permissions, and add it to ViewData
IEnumerable<MenuItem> menu = BuildMenu();
ViewData["Menu"] = menu;
}
在母版頁中:
<% var model = ViewData["Menu"] as IEnumerable<MenuItem>; %>
<% Html.RenderPartial("Menu", model); %>
(注意:實際上,我有一個MasterViewModel,其中包含菜單模型)
沒有人提到過MvcSiteMapProvider ,它可以使用NuGet輕松集成到Visual Studio項目中。
你聽說過MvcContrib的MenuBuilder嗎?
如果沒有,我建議你看一下。 示例項目UI
是開始學習如何使用它的好方法。
通常我只是以你做過的方式檢查角色,然后用鏈接渲染局部視圖或者只是創建它們。 使用Razor語法這樣的東西。 我使用T4MVC進行操作。
@if(User.IsInRole("Admin"))
{
<li><a href="@Url.Action(MVC.Admin.User.Index())">Users</a></li>
}
為了安全起見,我使用了Fluent Security。 希望這可以幫助。
到目前為止,喬的解決方案是最簡單的,對我有用。 我有頁面存在於不同的區域,我需要快速設置一個菜單系統,根據用戶所在的區域做出反應和工作。另外在我的情況下,我的系統中沒有跨區域鏈接,所以我要去接下來為MvcSiteMapProvider配置多個站點地圖 。
希望這可以幫助其他人尋找簡單有效的解決方案!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.