В моем проекте MVC 5 я реализовал IUserStore <> IUserRoleStore <> IRoleStore <> IUserPasswordStore <> для управления пользователями и ролями, хранящиеся в моей базе данных. Сейчас, когда я звоню:User.IsInRole() не возвращает ожидаемые результаты
if (User.IsInRole("roleName"))
Внутри моего устройства Razor View или Controller Я получаю странные результаты. Внутри моего семени (контекст MyDbContext) метод я создаю три роли:
UserRoleStore us = new UserRoleStore(context);
foreach (var role in Enum.GetValues(typeof(RolesEnum)).Cast<RolesEnum>())
us.CreateAsync(new Role(role.ToString()));
и два типа пользователей - один с правами администратора роли и других с коммивояжера роли. На моей странице макета у меня есть:
@if(User.Identity.IsAuthenticated)
{
if(User.IsInRole(Clinic.Enums.RolesEnum.Admin.ToString()))
{
<li>@Html.ActionLink("Admin", "Index", "Admin", routeValues: new { area = "" }, htmlAttributes: null)</li>
}
if (User.IsInRole(Clinic.Enums.RolesEnum.Salesman.ToString()))
{
<li>@Html.ActionLink("Salesman", "Index", "Salesman", routeValues: new { area = "" }, htmlAttributes: null)</li>
}
if (User.IsInRole(Clinic.Enums.RolesEnum.Customer.ToString()))
{
<li>@Html.ActionLink("Customer", "Index", "Customer", routeValues: new { area = "" }, htmlAttributes: null)</li>
}
}
Когда я войти, как коммивояжера я вижу только одну ссылку, которая Шоуда быть видимым для коммивояжера, но когда я войти как администратор, я вижу администратора и клиентов ссылку. Я попытался отлаживать остановку в строке User.IsInRole, но она не отходит оттуда, поэтому я не уверен, какая функция вызывается для проверки ролей, назначенных пользователю. Любая помощь будет оценена по достоинству.
Важно, что администратор имеет только административную роль, назначенную в моей базе данных. Я также вижу, что с помощью
if(UserManager.IsInRoleAsync(userId, "Admin").Result)
вместо
User.IsInRole("Admin")
работает отлично. Так в чем проблема с этой функцией? Что я забыл реализовать, чтобы заставить его работать?
Вы уверены, что учетная запись пользователя, который используется для входа в 'admin' не является' Customer' также в вашем Дб? – Michael
В моей базе данных нет пользователя с ролью Customer. Только один администратор с ролью администратора и несколькими пользователями с ролью Salesman. – user3482724
У меня также возникла эта проблема, реализован пользовательский менеджер, который предоставляет настраиваемую пользовательскую логику роли, однако вызов User.IsInRole возвращает функциональность по умолчанию. Вы это исправили? – Nick