【发布时间】:2015-06-05 09:39:00
【问题描述】:
在我的 MVC 5 项目中,我实现了 IUserStore、IUserRoleStore、IRoleStore、IUserPasswordStore 来管理存储在我的数据库中的用户和角色。现在当我打电话时:
if (User.IsInRole("roleName"))
在我的 Razor 视图或控制器中,我得到了奇怪的结果。在我的 Seed(MyDbContext context) 方法中,我创建了三个角色:
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")
工作正常。那么这个功能有什么问题呢?我忘记实施什么来使其正常工作?
【问题讨论】:
-
您确定用于以
Admin登录的用户帐户在您的数据库中不是Customer吗? -
我的数据库中没有具有客户角色的用户。只有一名具有管理员角色的管理员和多名具有销售员角色的用户。
-
我也遇到了这个问题,已经实现了一个自定义用户管理器,它提供了自定义用户角色逻辑,但是调用 User.IsInRole 返回默认功能。你解决了吗?
标签: asp.net-mvc entity-framework identity