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")) が false であるかのように。ユーザーが正常に認証されました (「間違ったパスワード」の警告はありません)。これの原因は何ですか?

更新:これまでに試したことは次のとおりです。1. ユーザー (「ユーザー」ロールを持つ) ロールを「管理者」に変更すると、ユーザーはメニューを表示できます。2. コードの配置を変更します (「ユーザー」の場合は「管理者」、そうでない場合は「ユーザー」)、ユーザーはメニューを表示できません。

「管理者」ユーザーでログインすると、ホームページにリダイレクトされ、メニューが表示されます。「ユーザー」ユーザーを使用してログインすると、ログインページに残り、ユーザー名テキストボックスはそのままで、パスワードテキストボックスは空白になり、警告は一切表示されません

「Admin」ユーザーでログインすると、「User.Identity.IsAuthenticated」が true になります。「ユーザー」では、その False です。

すべてのコントローラーで、これを追加しました... [Authorize(Roles = "Admin,User")]

...すべて無駄に。

4

2 に答える 2

0

私の悪い。AccountController の login メソッドが変更され、忘れていました。

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

ユーザーが正常にログインすると、

最初に、認証されたユーザーが利用できる役割を確認します...これに従って、さまざまな角度から確認できます

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