Asp.net

如何根據角色顯示或隱藏控制項 - ASP.NET MVC 4 Razor

  • September 16, 2017

我正在開發 ASP.NET MVC 4 應用程序。我有一個儀表板,我的使用者組將基於 Windows 域所以我使用 WIndows 身份驗證來驗證使用者。我創建了通過覆蓋函式 AuthorizeAttribute, ActionFilterAttribute 使用自定義身份驗證的範例應用程序。這是一個好方法嗎?

  1. 哪個屬性最適合用於身份驗證?

我有一個儀表板。所以我需要根據角色顯示或隱藏控制項。假設如果有 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")

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