Я использую репозиторий Rhino.Security для управления моими пользователями / ролями.
Процесс создания, удаления и связывания работает нормально, но я сталкиваюсь с проблемой, когда делаю запрос одним методом: GetAssociatedUsersGroupFor.
При первом вызове метода я не получаю никаких групп для своего пользователя, потому что я еще не создал никакой связи.
На этом этапе я связываю пользователя с парой групп.
Я проверяю в БД и вижу ассоциацию.
Теперь я снова вызываю GetAssociatedUsersGroupFor, но не могу получить группы.
С профилировщиком я видел, что в этот раз база данных не задействована.
Я проверил код и обнаружил, что функция использует Nhibernate SetCacheable:
public virtual UsersGroup[] GetAssociatedUsersGroupFor(IUser user)
{
ICollection<UsersGroup> usersGroups =
SecurityCriterions.AllGroups(user)
.GetExecutableCriteria(session)
.AddOrder(Order.Asc("Name"))
.SetCacheable(true)
.List<UsersGroup>();
return usersGroups.ToArray();
}
Поскольку я не хочу изменять код Rhino.Security, я хотел бы знать, могу ли я каким-либо образом переопределить или изменить это поведение.
UPDATE:
Я использую эту инструкцию для получения связанных групп:
AuthorizationRepository.GetAssociatedUsersGroupFor(User);
Я ассоциирую с этим кодом:
AuthorizationRepository.AssociateUserWith(User, grpName);
и отсоединить:
AuthorizationRepository.DetachUserFromGroup(User, groupToRemove.Name);
UPDATE
Я обнаружил, что я оставил кэш второго уровня в моей конфигурации:
<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<property name="cache.use_second_level_cache">true</property>
<property name="cache.use_query_cache">true</property>
Я думал, что было бы хорошо иметь кэш II уровня для повышения производительности, но, похоже, я был совершенно неправ.
Кто-нибудь может попытаться помочь мне понять, что здесь происходит?