簡體   English   中英

ASP.NET身份檢查用戶角色不起作用

[英]ASP.NET Identity check user roles is not working

我有一個ASP.NET MVC 5應用程序。 我正在使用標准的ASP.NET身份提供程序進行用戶和角色管理。 重要的是我從自己的存儲庫項目中使用IdentityUser,但這似乎沒問題。 我可以注冊,登錄,編輯用戶和管理他們的角色。

我使用以下行將用戶添加到Role:

UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();

這似乎在DB級別工作。

但是,我不能使用基於角色的身份驗證,實際上就是簡單

HttpContext.User.IsInRole("Administrator")

不起作用。

[Authorize(Roles="Administrator")]

不起作用。

我只能用這種方法檢查用戶是否是管理員:

UserManager.IsInRole(userID, "Administrator").

為什么?

在我發現的每個教程中,一切正常。 可能是不同的項目存儲庫? 或者ASP.NET身份這么多?

請指教,

在這種情況下,您需要注銷並再次登錄用戶。

由於角色數據也存儲在cookie中,因此您必須再次發出cookie才能使用它。

似乎有一個問題。 [設計問題]

  • 角色名稱在AuthorizeAttribute和User.IsInRole中區分大小寫
  • UserManager.IsInRole中的角色名稱不區分大小寫

此外,檢查用於驗證的正確角色名稱。

[以上是基於以下代碼進行的測試。 角色名稱=“管理員”,用戶被添加到角色“管理員”。]

[Authorize(Roles="Admin")] /*True as "Admin" has A capital as entered in Role name*/
public ActionResult Secured()
{
    if (User.IsInRole("admin")) /*This is False*/
    {
         Console.WriteLine("In");
    }
    if(UserManager.IsInRole(User.Identity.GetUserId(), "admin")) /*This is True!!*/
    {
         Console.WriteLine("In");
    }
    return View();
}

如果我們將屬性更改為[Authorize(Roles="admin")] ,則會重定向到“登錄”頁面。

你在web.config中有這個條目嗎?

    <roleManager enabled="true">
        <providers>
            <clear />
            <add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" />
        </providers>
    </roleManager>

另外,如果我沒記錯的話,在不同版本的.NET中,角色提供程序程序集有一個不同的命名空間。

暫無
暫無

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

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