Я использую репозиторий Rhino.Security для управления своими пользователями/ролями.
Процесс создания, удаления и связывания работает нормально, но я сталкиваюсь с проблемой при запросе с использованием одного метода: GetAssociatedUsersGroupFor.
При первом вызове метод, я не получаю никаких групп для своего пользователя, потому что я еще не создал никакой ассоциации. В этот момент я связываю пользователя с парой групп.
Я проверяю базу данных и вижу ассоциацию.
Теперь я снова вызываю GetAssociatedUsersGroupFor, но не могу получить ни одной группы.
С помощью profiler Я видел, что на этот раз база данных не задействована. Я проверил код и обнаружил, что функция использует 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, я хотел бы знать, могу ли я каким-либо образом переопределить или изменить это поведение.
ОБНОВЛЕНИЕ:
Я использую эту инструкцию для получения связанных групп:
AuthorizationRepository.GetAssociatedUsersGroupFor(User);
Я связываю с этим кодом:
AuthorizationRepository.AssociateUserWith(User, grpName);
и отсоединить:
AuthorizationRepository.DetachUserFromGroup(User, groupToRemove.Name);
ОБНОВЛЕНИЕ
Я обнаружил, что оставил кеш второго уровня в своем конфиге:
<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 уровня для повышения производительности, но, похоже, я был совершенно неправ.
Кто-нибудь может попытаться помочь мне понять, что здесь происходит?