Hi

I'm working with Jackrabbit 2.4.2 and have the following scenario:

   - Create a session for a non-admin user account.
   - Cast the session to an XAResource, generate a new transaction ID and
   start a transaction (like org.apache.jackrabbit.core.UserTransactionImpl).
   - Use the session to create a new node, record its identifier then set
   some properties and save the session.
   - After some further processing logic not using Jackrabbit, attempt to
   get the new node via its identifier.
      - javax.jcr.ItemNotFoundException is thrown from
      inside 
org.apache.jackrabbit.core.security.authorization.acl.CompiledPermissionsImpl.canRead
      when it uses an ItemManager instance to get the new node.

I have debugged through my code and the Jackrabbit code it calls, and can
see the following:

   - My new node is present in the item cache for my session, which is
   retrieved ok by the getNodeByIdentifier() call.
   - The permissions check above tries to retrieve my node by id using a
   different (system) session in the DefaultAccessManager, which doesn't have
   my node in its cache. This attempts to read the node from the persistence
   layer as a result, which fails as the data won't be there because of the
   transaction.

If I perform the same operation with an admin account, it works fine as the
can-read check is short-circuited to always return true.

Is there something I'm missing in how access control should be configured,
or how I'm using transactions?

Thanks in advance,

Regards

Nick Tuckett.

Reply via email to