簡體   English   中英

如何檢查當前用戶在 ASP.NET MVC 5 中的角色

[英]How to check current user's role in ASP.NET MVC 5

目前正在處理一個有趣的問題。 我正在構建一個具有三個不同用戶角色的網站。 登錄后,MVC 部分視圖會為用戶顯示導航選項。 我想根據用戶的角色顯示不同的選項。 在以前的網站中,我使用了以下代碼來確定角色:

@if (Roles.IsUserInRole("intern"))
{
    <li>@Html.ActionLink("Log Time", "Index", "Time")</li>
}

不幸的是,當我在當前代碼中嘗試此操作時,我收到了以下消息:

The Role Manager feature has not been enabled.

所以很明顯,在新的 MVC 中,他們默認禁用了角色管理器,並有一種新的方式來做到這一點。 沒什么大不了的。 搜索問題建議我在 web.config 中啟用該功能。 我遵循了一些關於如何做到這一點的說明(我保證我可以谷歌搜索),但它似乎與我的 SQL Server 連接字符串混亂,給我的錯誤表明它正在嘗試登錄到一個不存在的本地數據庫而不是我的 Azure SQL Server。 我已經玩了一段時間,我不知道為什么會這樣。

無論如何,長話短說,與其解決並重新啟用殘留的身份功能,不如在新的 MVC 中實現這一點? 我可以通過用戶管理器獲得角色精細的控制器端,但我不能在視圖中使用它。 同樣,充滿角色的 Viewbag 也無法工作,因為這是在每個頁面上進行導航。

我提前感謝所有幫助,謝謝大家!

剛剛找到答案,我會把這個留給其他處理這個的人。 正確的做法是:

@if (User.IsInRole("intern"))

這是有道理的,因為 MVC 正在從基於角色的對象轉向基於用戶的對象。

我認為一直詢問用戶角色並不是一個好主意,請求太多了。 最好詢問一次並將其保存在 Razor 中的變量中。 然后只需在需要時檢查該變量即可。 順便說一下,如果角色不同,您甚至不想詢問用戶是否處於該角色而不是另一個角色。 而是獲取列表中的角色列表並檢查指示的角色是否在列表中。

示例(我不確定它會編譯,看看想法):

@using Microsoft.AspNetCore.Identity
@using Microsoft.AspNetCore.Mvc.Localization
@inject UserManager<ApplicationUser> UserManager
@{
    ApplicationUser currentUser = await UserManager.GetUserAsync(User);
    var roles = await UserManager.GetRolesAsync(currentUser);
    bool isIntern = roles.Contains("intern");
    bool isExtern = roles.Contains("extern");
    bool isFoo = roles.Contains("foo");
    ...
} 

然后,進一步

@if (isIntern)
{
     <li>@Html.ActionLink("Log Time", "Index", "Time")</li>
}
else if (isExtern)
{
     ...
}

您可以根據需要多次控制用戶的角色,而無需發出其他請求,而且更具可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM