首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >User.IsInRole()未返回预期结果

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

Stack Overflow用户
提问于 2015-06-05 17:39:00
回答 1查看 880关注 0票数 1

在我的MVC5项目中,我实现了IUserStore<>、IUserRoleStore<>、IRoleStore<>、IUserPasswordStore<>来管理存储在数据库中的用户和角色。现在当我调用的时候:

代码语言:javascript
复制
if (User.IsInRole("roleName"))

在我的Razor视图或控制器中,我得到了奇怪的结果。在我的种子(MyDbContext上下文)方法中,我创建了三个角色:

代码语言:javascript
复制
UserRoleStore us = new UserRoleStore(context);

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

和两种类型的用户-一种是管理员角色,另一种是推销员角色。在我的布局页面中,我有:

代码语言:javascript
复制
@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行,但它没有任何地方从那里,所以我不确定哪个函数被调用来检查分配给用户的角色。任何帮助都将不胜感激。

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

代码语言:javascript
复制
if(UserManager.IsInRoleAsync(userId, "Admin").Result)

而不是

代码语言:javascript
复制
User.IsInRole("Admin")

工作正常。那么这个函数有什么问题呢?为了让它正常工作,我忘记实现了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-11-19 23:00:45

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30663227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档