It's a known issue -- Google it and you'll see others are having the
same problem. I'm not experienced enough with NH to know what the root
cause is here. :(

I have however just submitted a pull request on Github to Ayende with
a failing unit test illustrating the problem.

https://github.com/ayende/rhino-security/pull/8


-- David Archer

On Feb 15, 11:14 am, vandalo <alberto.bas...@gmail.com> wrote:
> I am pretty sure that this question has been asked many times but I
> haven't been able to find an answer yet.
> DetachUserFromGroup and/or AssociateUserWith members of
> AuthorizationRepository don't seem to invalidate the second-level
> cache.
> I've tried to investigate more but my knowledge of Nhibernate is too
> poor at the moment to find a proper solution.
> I've downloaded Rhino-Security from 
> here:https://github.com/ayende/rhino-security
> and extended AuthorizationServiceWithSecondLevelCacheFixture.
>
> The DatabaseFixture basically creates a user, 3 groups and associate
> the user with all the groups:
>
> user = new User { Name = "Ayende" };
>
> session.Save(user);
>
> authorizationService =
> ServiceLocator.Current.GetInstance<IAuthorizationService>();
> permissionService =
> ServiceLocator.Current.GetInstance<IPermissionsService>();
> permissionsBuilderService =
> ServiceLocator.Current.GetInstance<IPermissionsBuilderService>();
> authorizationRepository =
> ServiceLocator.Current.GetInstance<IAuthorizationRepository>();
>
> authorizationRepository.CreateUsersGroup("Administrators");
> authorizationRepository.CreateUsersGroup("Users");
> authorizationRepository.CreateUsersGroup("Guests");
>
> authorizationRepository.AssociateUserWith(user, "Administrators");
> authorizationRepository.AssociateUserWith(user, "Users");
> authorizationRepository.AssociateUserWith(user, "Guests");
>
> I've added this fixture
>
> [Fact]
> public void Test_Associated_Users_Group_For()
> {
>
>     session.Flush();
>     session.Transaction.Commit();
>     session.Dispose();
>
>     using (var s2 = factory.OpenSession())
>     {
>         using (var tx = s2.BeginTransaction())
>         {
>             SillyContainer.SessionProvider = () => s2;
>
>             var User = s2.CreateCriteria<User>()
>                 .Add(Restrictions.Eq("Name", "Ayende"))
>                 .UniqueResult<User>();
>
>             var anotherAuthorizationRepository =
> ServiceLocator.Current.GetInstance<IAuthorizationRepository>();
>
>             var Groups =
> anotherAuthorizationRepository.GetAssociatedUsersGroupFor(User);
>
>             anotherAuthorizationRepository.DetachUserFromGroup(User,
> "Guests");
>
>             s2.Flush();
>             tx.Commit();
>         }
>     }
>     using (var s3 = factory.OpenSession())
>     {
>         using (var tx = s3.BeginTransaction())
>         {
>             SillyContainer.SessionProvider = () => s3;
>
>             var User = s3.CreateCriteria<User>()
>                 .Add(Restrictions.Eq("Name", "Ayende"))
>                 .UniqueResult<User>();
>
>             var anotherAuthorizationRepository =
> ServiceLocator.Current.GetInstance<IAuthorizationRepository>();
>             var Groups =
> anotherAuthorizationRepository.GetAssociatedUsersGroupFor(User);
>
>             tx.Commit();
>         }
>     }
>
> }
>
> The 2nd session detaches the user from the group Guests but the 3rd
> session still fetches 3 groups associated with the user.
> It seems that the second-level cache can't be invalidated.
> Is there anyone who can help me?

-- 
You received this message because you are subscribed to the Google Groups 
"Rhino Tools Dev" group.
To post to this group, send email to rhino-tools-dev@googlegroups.com.
To unsubscribe from this group, send email to 
rhino-tools-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rhino-tools-dev?hl=en.

Reply via email to