在我的_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;)]
......一切都没有用。
答案 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);
}