User.IsInRole()未返回预期结果

时间:2015-06-05 09:39:00

标签: asp.net-mvc entity-framework identity

在我的MVC 5项目中,我实现了IUserStore<&gt ;,IUserRoleStore<&gt ;, IRoleStore<&gt ;,IUserPasswordStore<>管理存储在我的数据库中的用户和角色。现在我打电话的时候:

if (User.IsInRole("roleName"))

在我的Razor View或Controller中我得到了奇怪的结果。在我的Seed(MyDbContext context)方法中,我创建了三个角色:

UserRoleStore us = new UserRoleStore(context);

foreach (var role in Enum.GetValues(typeof(RolesEnum)).Cast<RolesEnum>())
    us.CreateAsync(new Role(role.ToString()));

和两种类型的用户 - 一个具有Admin角色,另一个具有Salesman角色。在我的布局页面中,我有:

@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>
    }
}

当我以Salesman身份登录时,我看到只有一个链接可供Salesman看到,但当我以管理员身份登录时,我会看到管理员和客户链接。我尝试在User.IsInRole行上调试停止,但它没有从那里去任何地方所以我不确定调用哪个函数来检查分配给用户的角色。任何帮助将不胜感激。

重要的是,admin只在我的数据库中分配了Admin角色。我也看到了使用

if(UserManager.IsInRoleAsync(userId, "Admin").Result)

而不是

User.IsInRole("Admin")

工作正常。那么这个功能的问题是什么?我忘了实施什么才能使它有效?

1 个答案:

答案 0 :(得分:0)

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