You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2013/11/14 16:30:16 UTC
svn commit: r1541933 -
/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
Author: angela
Date: Thu Nov 14 15:30:16 2013
New Revision: 1541933
URL: http://svn.apache.org/r1541933
Log:
OAK-527: permissions (wip)
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java?rev=1541933&r1=1541932&r2=1541933&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java Thu Nov 14 15:30:16 2013
@@ -82,12 +82,14 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Sets.newLinkedHashSet;
import static java.util.Arrays.asList;
import static java.util.Collections.singleton;
import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
import static org.apache.jackrabbit.oak.api.Type.NAME;
import static org.apache.jackrabbit.oak.api.Type.NAMES;
+import static org.apache.jackrabbit.oak.util.TreeUtil.getNames;
/**
* TODO document
@@ -928,7 +930,7 @@ public class NodeImpl<T extends NodeDele
}
@Override
- public void removeMixin(String mixinName) throws RepositoryException {
+ public void removeMixin(final String mixinName) throws RepositoryException {
final String oakTypeName = getOakName(checkNotNull(mixinName));
perform(new ItemWriteOperation<Void>() {
@Override
@@ -938,6 +940,16 @@ public class NodeImpl<T extends NodeDele
throw new VersionException(
"Cannot remove mixin type. Node is checked in.");
}
+
+ // check for NODE_TYPE_MANAGEMENT permission here as we cannot
+ // distinguish between a combination of removeMixin and addMixin
+ // and Node#remove plus subsequent addNode when it comes to
+ // autocreated properties like jcr:create, jcr:uuid and so forth.
+ Set<String> mixins = newLinkedHashSet(getNames(dlg.getTree(), JCR_MIXINTYPES));
+ if (!mixins.isEmpty() && mixins.remove(getOakName(mixinName))) {
+ PropertyState prop = PropertyStates.createProperty(JCR_MIXINTYPES, mixins, NAMES);
+ sessionContext.getAccessManager().checkPermissions(dlg.getTree(), prop, Permissions.NODE_TYPE_MANAGEMENT);
+ }
}
@Override
public Void perform() throws RepositoryException {