2015-06-05 8 views
1

В моем проекте 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") 

работает отлично. Так в чем проблема с этой функцией? Что я забыл реализовать, чтобы заставить его работать?

+0

Вы уверены, что учетная запись пользователя, который используется для входа в 'admin' не является' Customer' также в вашем Дб? – Michael

+0

В моей базе данных нет пользователя с ролью Customer. Только один администратор с ролью администратора и несколькими пользователями с ролью Salesman. – user3482724

+0

У меня также возникла эта проблема, реализован пользовательский менеджер, который предоставляет настраиваемую пользовательскую логику роли, однако вызов User.IsInRole возвращает функциональность по умолчанию. Вы это исправили? – Nick

ответ

0

Я была такая же проблема, и решение было удалить все куки, связанные с вашего сайта из браузера