[ 
https://issues.apache.org/jira/browse/JCR-643?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

angela updated JCR-643:
-----------------------

    Attachment: VersionStorageAccessTest.java

> Own AccessManager + VersionManager : AccesDenied problem
> --------------------------------------------------------
>
>                 Key: JCR-643
>                 URL: https://issues.apache.org/jira/browse/JCR-643
>             Project: Jackrabbit
>          Issue Type: Bug
>          Components: jackrabbit-core, versioning
>    Affects Versions: 1.4, 1.5.0
>            Reporter: Andrey
>         Attachments: VersionStorageAccessTest.java
>
>
> I have implemented my own AccessManager, and everything works fine, until I 
> want to use versioning (mix:versionable). 
> When I try this code:
> Node root = session.getRootNode();
> if (root.canAddMixin("mix:referenceable")) root.addMixin("mix:referenceable");
> Node new_node = root.addNode("some_name");
> if (new_node.canAddMixin("mix:referenceable")) 
> new_node.addMixin("mix:referenceable");
> if (new_node.canAddMixin("mix:versionable")) 
> new_node.addMixin("mix:versionable");
> // here I grant privileges to new_node
> handler.addACL(root.getUUID(), new_node.getUUID());
> session.save();
> I have a AccessDeniedException, then I look at jackrabbit sources 
> (VersionManagerImpl.java) and found this:
>  public VersionHistory createVersionHistory(Session session, final NodeState 
> node)
>             throws RepositoryException {
>         InternalVersionHistory history = (InternalVersionHistory)
>                 escFactory.doSourced((SessionImpl) session, new 
> SourcedTarget(){
>             public Object run() throws RepositoryException {
>                 return createVersionHistory(node);
>             }
>         });
> // HERE IS new version node created
>         if (history == null) {
>             throw new VersionException("History already exists for node " + 
> node.getNodeId());
>         }
> // AND HERE you want to check privileges for newly created node
>         return (VersionHistory) ((SessionImpl) 
> session).getNodeById(history.getId());
> }
> // so, SessionImpl ask ItemManager for  NodeImpl, 
> // ItemManager ask  AccessManager about Item privileges ( 
> session.getAccessManager().isGranted(id, AccessManager.READ) ),
> // and my AccessManager don't know anything about this Item, so it (Item) 
> haven't any privileges, 
> // and I have a AccessDeniedException
> Did I miss something? Can I use versioning with own AccessManager?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to