在我的MVC5项目中,我实现了IUserStore<>、IUserRoleStore<>、IRoleStore<>、IUserPasswordStore<>来管理存储在数据库中的用户和角色。现在当我调用的时候:
if (User.IsInRole("roleName"))在我的Razor视图或控制器中,我得到了奇怪的结果。在我的种子(MyDbContext上下文)方法中,我创建了三个角色:
UserRoleStore us = new UserRoleStore(context);
foreach (var role in Enum.GetValues(typeof(RolesEnum)).Cast<RolesEnum>())
us.CreateAsync(new Role(role.ToString()));和两种类型的用户-一种是管理员角色,另一种是推销员角色。在我的布局页面中,我有:
@if(User.Identity.IsAuthenticated)
{
if(User.IsInRole(Clinic.Enums.RolesEnum.Admin.ToString()))
{
<li>@Html.ActionLink("Admin", "Index", "Admin", routeValues: new { area = "" }, htmlAttributes: null)</li>
}
if (User.IsInRole(Clinic.Enums.RolesEnum.Salesman.ToString()))
{
<li>@Html.ActionLink("Salesman", "Index", "Salesman", routeValues: new { area = "" }, htmlAttributes: null)</li>
}
if (User.IsInRole(Clinic.Enums.RolesEnum.Customer.ToString()))
{
<li>@Html.ActionLink("Customer", "Index", "Customer", routeValues: new { area = "" }, htmlAttributes: null)</li>
}
}当我以推销员的身份登录时,我只看到一个对推销员应该可见的链接,但当我以管理员身份登录时,我看到的是管理员和客户链接。我试图调试停止在User.IsInRole行,但它没有任何地方从那里,所以我不确定哪个函数被调用来检查分配给用户的角色。任何帮助都将不胜感激。
重要的是,管理员在我的数据库中只分配了管理员角色。我也看到使用
if(UserManager.IsInRoleAsync(userId, "Admin").Result)而不是
User.IsInRole("Admin")工作正常。那么这个函数有什么问题呢?为了让它正常工作,我忘记实现了什么?
发布于 2017-11-19 23:00:45
我也遇到了同样的问题,解决方案是从浏览器中清除与您的站点相关的所有cookie
https://stackoverflow.com/questions/30663227
复制相似问题