【问题标题】:The User.IsInRole working for Admin but false for other usersUser.IsInRole 为 Admin 工作,但对其他用户为 false
【发布时间】:2016-08-10 15:24:04
【问题描述】:

在我的 _Layout.chtml 中,我想根据用户角色在导航栏上显示菜单。简而言之,我有“管理员”和“用户”角色。这是我在 _Layout.html 中的代码

    <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li>@Html.ActionLink("Home", "Index", "Home")</li>

                @if (User.IsInRole("Admin"))
        {
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Manage Users</a>
                        <ul class="dropdown-menu">
                            <li>@Html.ActionLink("User", "Index", "User")</li>
                        </ul>
                    </li>
        }
        else if (User.IsInRole("User"))
                    {
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">User</a>
                        <ul class="dropdown-menu">
                            <li>@Html.ActionLink("User2", "Index2", "User2")</li>
                        </ul>
                    </li>
        }
                else
                {
                }

            </ul>
        </div>

问题是,当我以“管理员”角色登录用户时,我可以看到菜单。但是当我使用“用户”登录时,什么也没有。好像 (User.IsInRole("User")) 是假的。用户身份验证成功(没有“密码错误”警告)。这可能是什么原因?

更新:这是我到目前为止所尝试的。 1.将用户(具有“用户”角色)角色更改为“管理员”,用户可以看到菜单。 2.更改代码的排列方式(如果“用户”.....否则“管理员”),仍然是“用户”)用户看不到菜单。

当我使用“Admin”用户登录时,它将重定向到主页并出现菜单。 当我使用“用户”用户登录时,它将停留在登录页面上,用户名文本框完好无损, 密码文本框空白,没有任何警告

当我使用“Admin”用户登录时,“User.Identity.IsAuthenticated”为真。 使用“用户”,它是 False。

在所有控制器中,我都添加了这个... [授权(角色=“管理员,用户”)]

...一切都无济于事。

【问题讨论】:

  • 您确定用户具有“用户”角色吗?
  • 完全确定。这是我到目前为止所尝试的。 1.将用户角色更改为“管理员”,用户可以看到菜单。 2.改变代码的排列方式(如果“用户”.....否则“管理员”),仍然用户看不到菜单。
  • 当我使用“Admin”用户登录时,它会重定向到主页并出现菜单。当我使用“用户”用户登录时,它将停留在登录页面上,用户名文本框完整,密码文本框空白,并且没有任何警告。

标签: c# asp.net asp.net-mvc isinrole


【解决方案1】:

当用户登录成功时,

首先检查Authenticated用户的可用角色是什么...据此我们可以从不同的角度检查

  @if (Request.IsAuthenticated)
            {
                 string[] r = Roles.GetRolesForUser();
                 string s = string.Join(",", r.ToList());
                <h1>@s</h1>
}

【讨论】:

  • 我得到了这些:System.Web.dll 中发生了“System.NullReferenceException”类型的异常,但未在用户代码中处理
【解决方案2】:

我的错。 AccountController 中的登录方法已更改,我忘记了。

if ((UserManager.IsInRole(user.Id, "Admin")) || (UserManager.IsInRole(user.Id, "User")))
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2022-08-02
    相关资源
    最近更新 更多