【问题标题】:User.IsInRole() not returning expected resultsUser.IsInRole() 未返回预期结果
【发布时间】: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


【解决方案1】:

我遇到了同样的问题,解决方法是从浏览器中清除所有与您的网站相关的 cookie

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2010-09-22
    • 2021-05-17
    • 2018-02-19
    • 2018-03-23
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多