我有一个ASP.NET MVC5应用程序。我使用标准的ASP.NET身份提供者进行用户和角色管理。使用自己的存储库项目中的IdentityUser是很重要的,但这似乎没问题。我可以注册、登录、编辑用户和管理他们的角色。
我用以下几行代码将用户添加到角色:
UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
这似乎可以在数据库级别工作。
但是,我不能使用基于角色的身份验证,实际上
HttpContext.User.IsInRole("Administrator")
也不起作用。
[Authorize(Roles="Administrator")]
也不起作用。
我只能通过这种方式来检查用户是否为管理员:
UserManager.IsInRole(userID, "Administrator").
为什么?
在我发现的每个教程中,一切都运行得很好。不同的项目存储库可能是原因?还是ASP.NET身份被破坏得如此之深?
敬请指教,
发布于 2014-04-09 22:30:46
在这种情况下,您需要注销并重新登录该用户。
因为角色数据也存储在cookie中,所以您必须再次发出cookie才能使用它。
发布于 2013-11-22 06:04:52
你的web.config里有这个条目吗?
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" />
</providers>
</roleManager>
此外,如果我没记错的话,在不同版本的.NET中,角色提供程序程序集也有不同的命名空间。
发布于 2021-09-09 05:11:57
我在Asp.Net核心中使用IsInRoleAsync
,在我的例子中,问题是我在创建角色时忽略了它的规范化名称。因此,在更新角色的规范化名称后,一切都正常工作。
https://stackoverflow.com/questions/20132795
复制相似问题