[
https://issues.apache.org/jira/browse/JCR-643?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jukka Zitting updated JCR-643:
------------------------------
Component/s: jackrabbit-core
Affects Version/s: 1.5.0
1.4
> 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
>
> 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.