mar*_*onx 21 c# asp.net asp.net-mvc asp.net-identity
我有一个ASP.NET MVC 5应用程序.我正在使用标准的ASP.NET身份提供程序进行用户和角色管理.重要的是我从自己的存储库项目中使用IdentityUser,但这似乎没问题.我可以注册,登录,编辑用户和管理他们的角色.
我使用以下行将用户添加到Role:
UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这似乎在DB级别工作.
但是,我不能使用基于角色的身份验证,实际上就是简单
HttpContext.User.IsInRole("Administrator")
Run Code Online (Sandbox Code Playgroud)
不起作用.
[Authorize(Roles="Administrator")]
Run Code Online (Sandbox Code Playgroud)
不起作用.
我只能用这种方法检查用户是否是管理员:
UserManager.IsInRole(userID, "Administrator").
Run Code Online (Sandbox Code Playgroud)
为什么?
在我发现的每个教程中,一切正常.可能是不同的项目存储库?或者ASP.NET身份这么多?
请指教,
Mau*_*and 23
在这种情况下,您需要注销并再次登录用户.
由于角色数据也存储在cookie中,因此您必须再次发出cookie才能使用它.
jd4*_*d4u 17
似乎有一个问题. [设计问题]
此外,检查用于验证的正确角色名称.
[以上是基于以下代码进行的测试.角色名称="管理员",用户被添加到角色"管理员".]
[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();
}
Run Code Online (Sandbox Code Playgroud)
如果我们将属性更改为[Authorize(Roles="admin")]
,则会重定向到"登录"页面.
归档时间: |
|
查看次数: |
21851 次 |
最近记录: |