User.IsInRole适用于Admin,但其他用户则为false

时间:2016-04-18 18:26:26

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

在我的_Layout.chtml中,我想根据用户角色在导航栏上显示菜单。为了缩短它,我有" Admin"和"用户"角色。这是我在_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>

问题是,当我使用&#34; Admin&#34;角色,我可以看到菜单。但是当我使用&#34; User&#34;登录时,什么都没有。好像(User.IsInRole(&#34; User&#34;))是假的。用户已成功通过身份验证(没有&#34;密码错误&#34;警告)。造成这种情况的原因是什么?

更新:这是我到目前为止所尝试的内容。 1.将用户(使用&#34;用户&#34;角色)角色更改为&#34;管理员&#34;,用户可以看到菜单。 2.更改代码的排列(如果&#34;用户&#34; ..... Else&#34;管理员&#34;),仍然&#34;用户&#34;)用户无法看到菜单。

当我使用&#34; Admin&#34;用户,它将重定向到主页,菜单将出现。 当我使用&#34; User&#34;用户,它将保留在登录页面,用户名文本框完整, 密码文本框空白,并且没有任何警告

当我使用&#34; Admin&#34;用户,&#34; User.Identity.IsAuthenticated&#34;是真的。 使用&#34; User&#34;,其为False。

在所有控制器中,我已经添加了这个...... [授权(角色=&#34;管理员,用户&#34;)]

......一切都没有用。

2 个答案:

答案 0 :(得分:0)

当用户成功登录时,

首先检查经过身份验证的用户的可用角色...根据此我们可以检查不同的角度

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

答案 1 :(得分:0)

我的坏。 AccountController中的登录方法已更改,我忘了它。

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