Роли пользователей не обновляются для структуры сущностей в customroleprovider - PullRequest
1 голос
/ 13 марта 2012

У меня есть приложение со следующими отношениями между пользователем и ролью:

modelBuilder.Entity<User>()
                .HasMany(c => c.Roles)
                .WithMany(p => p.Users)
                .Map(
                   m => {
                       m.MapLeftKey("UserId");
                       m.MapRightKey("RoleId");
                       m.ToTable("UserRole");
                   });

Довольно стандартные вещи.У меня есть customRoleProvider, настроенный следующим образом:

    public class CustomRoleProvider : RoleProvider
        {
            private readonly IUnitOfWork _unitOfWork;

            public CustomRoleProvider()
            {
                _unitOfWork = DependencyResolver.Current.GetService<IUnitOfWork>();
            }

            public CustomRoleProvider(IUnitOfWork unitOfWork)
            {
                _unitOfWork = unitOfWork;
            }

...

            public override string[] GetRolesForUser(string username)
            {
                var user = _unitOfWork.UserRepository.GetUser(username);

                var roles = from r in user.Roles
                            select r.Name;

                if (roles != null)
                    return roles.ToArray();
                else
                    return new string[] { };
            }

            public override bool IsUserInRole(string username, string roleName)
            {
                var user = _unitOfWork.UserRepository.GetUser(username);

                var roles = from r in user.Roles
                            select r.Name;

                return roles.Any(r => r.Equals(roleName, StringComparison.CurrentCultureIgnoreCase));
            }
    ...

        }

Кажется, что это работает нормально и возвращает роли нормально с исключением.Если вы добавляете роли через что-то вроде:

user.Roles.Add(role);

            _db.SaveChanges();

Код не находит новую роль до тех пор, пока вы не перезапустите приложение, что не очень хорошо.

В результате экспериментов, которые я нашелчто, если я создаю экземпляр unitOfWork всякий раз, когда он мне нужен, будет найден полный список ролей:

public override string[] GetRolesForUser(string username)
            {
                  **var unitOfWork = new UnitOfWork();**

                var user = unitOfWork.UserRepository.GetUser(username);

                var roles = from r in user.Roles
                            select r.Name;

                if (roles != null)
                    return roles.ToArray();
                else
                    return new string[] { };
            }

Однако я не очень хочу использовать этот подход.

Кто-нибудь знает, как исправитьэто?

1 Ответ

1 голос
/ 13 марта 2012

Проверьте, кэшируете ли вы свои роли в куки пользователя. Попробуйте добавить cacheRolesInCookie="false" в узел roleManager вашего web.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...