User.IsInRole работает для Admin, но false для других пользователей

В моем _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("Пользователь")) ложно. Пользователь успешно авторизован (предупреждение "Неправильный пароль" отсутствует). Что может быть причиной этого?

ОБНОВЛЕНИЕ: Вот то, что я попробовал до сих пор. 1. Измените роль пользователя (с ролью "Пользователь") на "Администратор", пользователь сможет увидеть меню. 2. Измените расположение кода (если "Пользователь"..... Иначе "Администратор"), но все равно "Пользователь"), пользователь не сможет увидеть меню.

Когда я захожу с правами администратора, он будет перенаправлен на домашнюю страницу и появится меню. Когда я вхожу, используя пользователя "Пользователь", он останется на странице входа, текстовое поле имени пользователя не повреждено, текстовое поле пароля пусто и никаких предупреждений

Когда я вхожу в систему с правами администратора, "User.Identity.IsAuthenticated" имеет значение true. С "Пользователем" - Ложь.

Во всех контроллерах я добавил это... [Authorize (Roles = "Admin, User")]

... все безрезультатно.

2 ответа

Когда пользователь успешно вошел в систему,

Сначала проверьте, какие роли доступны для аутентифицированного пользователя... В соответствии с этим мы можем проверять под разными углами

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

Виноват. Метод входа в AccountController был изменен, и я забыл об этом.

if ((UserManager.IsInRole(user.Id, "Admin")) || (UserManager.IsInRole(user.Id, "User")))
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
Другие вопросы по тегам