[英]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才能使用它。
似乎有一個問題。 [設計問題]
此外,檢查用於驗證的正確角色名稱。
[以上是基於以下代碼進行的測試。 角色名稱=“管理員”,用戶被添加到角色“管理員”。]
[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.