0

在我的 _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”用户登录时,“User.Identity.IsAuthenticated”为真。使用“用户”,其为 False。

在所有控制器中,我添加了这个... [Authorize(Roles = "Admin,User")]

……一切都无济于事。

4

2 回答 2

0

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

if ((UserManager.IsInRole(user.Id, "Admin")) || (UserManager.IsInRole(user.Id, "User")))
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
于 2016-04-19T07:48:12.510 回答
0

用户登录成功后,

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

  @if (Request.IsAuthenticated)
            {
                 string[] r = Roles.GetRolesForUser();
                 string s = string.Join(",", r.ToList());
                <h1>@s</h1>
}
于 2016-04-19T04:59:43.227 回答