Asp.net-Mvc-4

基於角色的導航

  • December 11, 2015

我一直在嘗試想出一種方法來為我正在從事的項目創建基於動態角色的導航解決方案。

導航應僅顯示與使用者角色相關的連結,例如:管理員將具有查看應用程序統計資訊、管理客戶帳戶等的連結……而標準使用者將具有管理其帳戶、與朋友交流的連結, 等等..

我目前有一個名為Navigation的局部視圖,其中包含一些用於角色檢查的基本條件語句和用於顯示適當連結的混合標記。這行得通,但是,我知道它很快就會變得難以管理。

導航局部視圖:

@if(User.IsInRole("Admin")) {
   <li><a href="#">Statistics</a></li>
   <li><a href="#">Accounts</a></li>
   <li><a href="#">Dashboard</a></li>
} 
@if(User.IsInRole("User")) {
   <li><a href="#">Account</a></li>
   <li><a href="#">Friends</a></li>
}
// code omitted

有沒有辦法讓這個邏輯脫離視圖並讓控制器處理這個?

解決方案

按照建議,我為每個角色創建了一個名為 Menu 的 ChildAction 和部分視圖。在操作中,我使用一些條件語句進行一些角色檢查並呈現適當的視圖。

這樣可以將條件語句排除在視圖之外,從而使其成為更清潔的解決方案。

我確信可以做一些事情來整理它,我會繼續努力改進它。

這是我使用的解決方案。

在我希望菜單出現的佈局視圖中,我使用了這個。

@Html.Action("Menu", "Navigation")

然後我創建了一個名為 Navigation 的控制器並添加了一個名為 Menu 的 Action。

public class NavigationController : Controller
{

   [ChildActionOnly]
   public ActionResult Menu()
   {
       if (Roles.IsUserInRole("Administrator"))
       {
           return PartialView("_NavigationAdmin");

       }

       return PartialView("_NavigationPublic");
   }

}

引用自:https://stackoverflow.com/questions/17012643