Asp.net
如何根據角色顯示或隱藏控制項 - ASP.NET MVC 4 Razor
我正在開發 ASP.NET MVC 4 應用程序。我有一個儀表板,我的使用者組將基於 Windows 域所以我使用 WIndows 身份驗證來驗證使用者。我創建了通過覆蓋函式 AuthorizeAttribute, ActionFilterAttribute 使用自定義身份驗證的範例應用程序。這是一個好方法嗎?
- 哪個屬性最適合用於身份驗證?
我有一個儀表板。所以我需要根據角色顯示或隱藏控制項。假設如果有 3 個網格(表),如果管理員登錄,他可以看到 3 個網格(表)。但如果支持使用者登錄,他只能看到 2 個網格(表格)。
我的計劃是為每個網格創建局部視圖,因此每個局部視圖都會有一個動作和控制器。將有一個數據庫,其中我將指定每個組可以執行的操作。這樣我就可以過濾請求。
2 如何隱藏或顯示基於角色的部分視圖?
我嘗試了一些 SO 連結,但他們都在談論 2,3 角色並且它是硬編碼的。在我的情況下,角色可能會有所不同,我們使用 db 來設置角色的訪問權限。
提前致謝。
您可以使用以下程式碼進行基於角色的檢查
@if(Request.IsAuthenticated) { if(User.IsInRole("Admin")) { <Ul Class="SubMenuItem"> <li> this menu item is for Admin role</li> </Ul> } if(User.IsInRole("User")) { <Ul Class="SubMenuItem"> <li> this menu item is for User role</li> </Ul> } } @* For unknown user *@ else { <Ul Class="SubMenuItem"> <li> this menu item is for Unknown user</li> </Ul> }
通常,您希望保持視圖盡可能乾淨,幾乎沒有邏輯。我建議將您的角色檢查邏輯移動到控制器操作中,並根據使用者角色呈現部分視圖。
您可以使用ChildActions和 Html.Action 擴展方法來連接它。
來自 MSDN:
子操作方法為視圖的一部分呈現內聯 HTML 標記,而不是呈現整個視圖。任何標有 ChildActionOnlyAttribute 的方法只能使用 Action 或 RenderAction HTML 擴展方法呼叫。
在您的項目中,創建一個名為Dashboard的新 Controller並添加一個名為BuildTable的 Action 。
public class DashboardController : Controller { [ChildActionOnly] public ActionResult BuildTable() { if (Roles.IsUserInRole("Administrator")) { return PartialView("_AdminTable"); } return PartialView("_SupportTable"); } }在您希望儀表板表出現的視圖中包括以下行。
@Html.Action("BuildTable", "Dashboard")