Author: angela
Date: Wed Jun 17 09:58:05 2015
New Revision: 1685980
URL: http://svn.apache.org/r1685980
Log:
OAK-2997 : Document mapping between built-in privileges and API calls + items
Added:
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoitems.md
- copied, changed from r1685932,
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mapping.md
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoprivileges.md
Removed:
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mapping.md
Modified:
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege.md
Modified: jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege.md
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege.md?rev=1685980&r1=1685979&r2=1685980&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege.md
(original)
+++ jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege.md Wed
Jun 17 09:58:05 2015
@@ -119,7 +119,8 @@ Please note the following differences wi
- `jcr:modifyProperties` is now an aggregation of `rep:addProperties`,
`rep:alterProperties` and `rep:removeProperties`
An overview on how the built-in privileges map to API calls and individual
items
-can be found [here](privilege/mapping.html)
+can be found in ['Mapping Privileges to Items'](privilege/mappingtoitems.html)
+and ['Mapping API Calls to Privileges'](privilege/mappingtoprivileges.html)
##### New Privileges
Copied:
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoitems.md
(from r1685932,
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mapping.md)
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoitems.md?p2=jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoitems.md&p1=jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mapping.md&r1=1685932&r2=1685980&rev=1685980&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mapping.md
(original)
+++
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoitems.md
Wed Jun 17 09:58:05 2015
@@ -14,68 +14,69 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-### Privilege Management : Mapping Privileges to API Calls and Items
+### Privilege Management : Mapping Privileges to Items
-The following table allows to identify which API calls require which type of
-privilege(s) and also list the affect items.
+The following table allows to identify which items will be affected by the
+invididual built in privileges.
+
+Note: the term _regular_ is used on contrast to _protected_ items that are
written
+using special API calls and thus mandate special privileges or are maintained
+by the system only and cannot be modified by the API consumer.
#### Read
-| Privilege | API Calls | Affected
Items |
-|-----------------------|----------------------------------------------------------|
-| rep:readNodes | all operations reading nodes | all nodes
except for access control content (see below) |
-| rep:readProperties | all operations reading properties | all
properties except for access control content (see below) |
-| jcr:readAccessControl |
`AccessControlManager.getApplicablePolicies`,`AccessControlManager.getPolicies`,
`AccessControlManager.getEffectivePolicies` | all nodes and properties that
defined access control content (details are implementation specific) |
+| Privilege | Affected Items
|
+|-----------------------|-------------------------------------------------------|
+| rep:readNodes | all nodes except for access control content
|
+| rep:readProperties | all properties except for access control content
|
+| jcr:readAccessControl | all items defining access control content (see
below) |
#### Writing Properties
-| Privilege | API Calls | Affected
Items |
-|-----------------------|----------------------------------------------------------|
-| rep:addProperties | `Node.setProperty` | all regular
(non-protected) properties that do not yet exist |
-| rep:alterProperties | `Property.setValue`, `Node.setProperty` | all
regular (non-protected) properties that already exist |
-| rep:removeProperties | `Property.remove`, `Node.setProperty(String, null)`,
`JackrabbitSession.removeItem` (if item is a property) | all regular
(non-protected) properties that do exist |
-
+| Privilege | Affected Items
|
+|-----------------------|-------------------------------------------------------|
+| rep:addProperties | creation of new regular properties
|
+| rep:alterProperties | changing existing regular properties
|
+| rep:removeProperties | removing existing regular properties
|
#### Writing Nodes
-| Privilege | API Calls | Affected
Items |
-|-----------------------|----------------------------------------------------------|
-| jcr:addChildNodes | `Node.addNode` | granted on
parent to create regular (non-protected) nodes |
-| jcr:removeChildNodes | `Node.remove`, `JackrabbitSession.removeItem` (if
item is a node) | granted on parent to remove regular (non-protected) nodes |
-| rep:removeNode | `Node.remove`, `JackrabbitSession.removeItem` (if
item is a node) | granted on the regular (non-protected) node to be removed |
-| jcr:nodeTypeManagement| `Node.addNode(String, String)`,
`Node.setPrimaryType`, `Node.addMixin`, `Node.removeMixin` | explicitly setting
or modifying node type information on a regular (non-protected) node; affected
properties are `jcr:primaryType`, `jcr:mixinTypes` |
-
-Please node the following special cases:
-
-- Reorder: `Node.orderBefore` requires `jcr:removeChildNodes` and
`jcr:addChildNodes` on the parent.
-- Move: `Session.move`, `Workspace.move` require `jcr:removeChildNodes` at the
source parent and `jcr:addChildNodes` at the target parent.
-- Copy: `Workspace.copy` requires require same privileges as if items would
be created using regular API calls.
-- Import: `Session.importXml`, `Workspace.importXml` require same privileges
as if items would be created using regular API calls.
+| Privilege | Affected Items
|
+|-----------------------|-------------------------------------------------------|
+| jcr:addChildNodes | granted on parent to create new regular child nodes
|
+| jcr:removeChildNodes | granted on parent to remove regular child nodes
|
+| rep:removeNode | required to be granted on regular nodes for removal
|
+| jcr:nodeTypeManagement| explicitly setting or modifying node type
information on a regular (non-protected) node; affected properties are
`jcr:primaryType`, `jcr:mixinTypes` |
#### Access Control Management
-| Privilege | API Calls | Affected
Items |
-|-----------------------|----------------------------------------------------------|
-| jcr:readAccessControl |
`AccessControlManager.getApplicablePolicies`,`AccessControlManager.getPolicies`,
`AccessControlManager.getEffectivePolicies` | all nodes and properties
defining access control content |
-| jcr:modifyAccessControl | `AccessControlManager.setPolicy`,
`AccessControlManager.removePolicy` | all nodes and properties defining access
control content |
-| rep:privilegeManagement | `PrivilegeManager.registerPrivilege` |
implementation specific |
+| Privilege | Affected Items
|
+|-------------------------|-----------------------------------------------------|
+| jcr:readAccessControl | all items defining access control content (1)
|
+| jcr:modifyAccessControl | all items defining access control content (1)
|
+| rep:privilegeManagement | implementation specific; in Oak everything below
`/jcr:system/rep:privileges` |
+
+(1) in Oak reading/writing nodes with the following node types: `rep:Policy`,
`rep:ACL`, `rep:ACE`, `rep:GrantACE`, `rep:DenyACE`, `rep:Restrictions`,
`rep:CugPolicy` and all protected items defined therein
#### Other Session and Workspace Operations
-| Privilege | API Calls | Affected
Items |
-|-------------------------|----------------------------------------------------------|
-| jcr:versionManagement | `VersionManager.*` (writing) | writing
`/jcr:system/jcr:versionStorage`, `/jcr:system/jcr:activities`,
`/jcr:system/jcr:configurations` and the following properties `jcr:activity`,
`jcr:activityTitle`, `jcr:baseVersion`, `jcr:childVersionHistory`,
`jcr:configuration`, `jcr:copiedFrom`, `jcr:frozenMixinTypes`,
`jcr:frozenPrimaryType`, `jcr:frozenUuid`, `jcr:isCheckedOut`,
`jcr:mergeFailed`,
`jcr:predecessors`,`jcr:successors`,`jcr:root`,`jcr:versionableUuid`,
`jcr:versionHistory` |
-| jcr:lockManagement | `LockManager.*` (writing) |
`jcr:lockIsDeep`, `jcr:lockOwner` |
-| jcr:lifecycleManagement | `Node.followLifecycleTransition` |
`jcr:lifecyclePolicy`, `jcr:currentLifecycleState` |
-| jcr:retentionManagement | `RetentionManager.*` (all writing) |
implementation specific, in Jackrabbit 2.x the following properties:
`rep:hold`, `rep:retentionPolicy` |
-| rep:userManagement | all user mgt operations writing protected items |
implementation specific; in Oak creating nodes with the following primary
types: `rep:User`, `rep:SystemUser`, `rep:Group`, `rep:Impersonatable`,
`rep:Members`, `rep:MemberReferences`, `rep:MemberReferencesList`,
`rep:Password` and all protected properties defined therein |
-| rep:indexDefinitionManagement | all write operations affecting index
definitions | implementation specific; in Oak trees starting with an
`oak:index` node |
+| Privilege | Affected Items
|
+|-------------------------|-----------------------------------------------------|
+| jcr:versionManagement | all items defining version content (2)
|
+| jcr:lockManagement | Properties `jcr:lockIsDeep`, `jcr:lockOwner`
|
+| jcr:lifecycleManagement | `jcr:lifecyclePolicy`, `jcr:currentLifecycleState`
|
+| jcr:retentionManagement | implementation specific, in Jackrabbit 2.x the
following properties: `rep:hold`, `rep:retentionPolicy`, Oak: NA |
+| rep:userManagement | all items defining user/group content (3)
|
+| rep:indexDefinitionManagement | implementation specific; in Oak trees
starting with an `oak:index` node |
+
+(2) granting jcr:versionManagement privilege at a given versionable node will
allow writing items through JCR version management API which writes below
`/jcr:system/jcr:versionStorage`, `/jcr:system/jcr:activities`,
`/jcr:system/jcr:configurations` and the following properties both in the
storage(s) and with the versionable node: `jcr:activity`, `jcr:activityTitle`,
`jcr:baseVersion`, `jcr:childVersionHistory`, `jcr:configuration`,
`jcr:copiedFrom`, `jcr:frozenMixinTypes`, `jcr:frozenPrimaryType`,
`jcr:frozenUuid`, `jcr:isCheckedOut`, `jcr:mergeFailed`,
`jcr:predecessors`,`jcr:successors`,`jcr:root`,`jcr:versionableUuid`,
`jcr:versionHistory`
+(3) in Oak creating nodes with the following primary types: `rep:User`,
`rep:SystemUser`, `rep:Group`, `rep:Impersonatable`, `rep:Members`,
`rep:MemberReferences`, `rep:MemberReferencesList`, `rep:Password` and all
protected properties defined therein
#### Repository Operations
-| Privilege | API Calls | Affected
Items |
-|-------------------------|----------------------------------------------------------|
-| jcr:namespaceManagement | `NamespaceRegistry.registerNamespace`,
`NamespaceRegistry.unregisterNamespace` | implementation specific; in Oak
everything below `/jcr:system/rep:namespaces` |
-| jcr:nodeTypeDefinitionManagement | `NodeTypeManager.registerNodeType`,
`NodeTypeManager.registerNodeTypes`, `NodeTypeManager.unregisterNodeType`,
`NodeTypeManager.unregisterNodeTypes` | implementation specific; in Oak
everything below `/jcr:system/jcr:nodeTypes` |
-| rep:privilegeManagement | `PrivilegeManager.registerPrivilege` |
implementation specific; in Oak everything below `/jcr:system/rep:privileges` |
-| jcr:workspaceManagement | `Workspace.createWorkspace`,
`Workspace.deleteWorkspace` | NA |
+| Privilege | Affected Items
|
+|-------------------------|-----------------------------------------------------|
+| jcr:namespaceManagement | implementation specific; in Oak everything below
`/jcr:system/rep:namespaces` |
+| jcr:nodeTypeDefinitionManagement | implementation specific; in Oak
everything below `/jcr:system/jcr:nodeTypes` |
+| rep:privilegeManagement | implementation specific; in Oak everything below
`/jcr:system/rep:privileges` |
+| jcr:workspaceManagement | NA
|
Added:
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoprivileges.md
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoprivileges.md?rev=1685980&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoprivileges.md
(added)
+++
jackrabbit/oak/trunk/oak-doc/src/site/markdown/security/privilege/mappingtoprivileges.md
Wed Jun 17 09:58:05 2015
@@ -0,0 +1,237 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+### Privilege Management : Mapping API Calls to Privileges
+
+The following table allows to identify which API calls require which type of
+privilege(s)
+
+#### Read
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `Session.itemExists` | `jcr:read`
|
+| `Session.getItem` | `jcr:read`
|
+| `Session.nodeExists` | `rep:readNodes`
|
+| `Session.nodeExists` | `rep:readNodes`
|
+| `Session.getNode` | `rep:readNodes`
|
+| `Session.getRootNode` | `rep:readNodes`
|
+| `Session.getNodeByUUID` | `jcr:read`
|
+| `Session.getNodeByIdentifier` | `jcr:read`
|
+| `Session.getNode` | `rep:readNodes`
|
+| `Session.propertyExists` | `rep:readProperties`
|
+| `Session.getProperty` | `rep:readProperties`
|
+| `Item.getParent` | `rep:readNodes` on parent
|
+| `Item.getAncestor` | `rep:readNodes` on ancestor
|
+| `Node.hasNode` | `rep:readNodes`
|
+| `Node.hasNodes` | `rep:readNodes`
|
+| `Node.getNode` | `rep:readNodes`
|
+| `Node.getNodes` | `rep:readNodes`
|
+| `Node.hasProperty` | `rep:readProperties`
|
+| `Node.hasProperties` | `rep:readProperties`
|
+| `Node.getProperty` | `rep:readProperties`
|
+| `Node.getProperties` | `rep:readProperties`
|
+| `Node.getUUID` | `rep:readProperties`
|
+| `Node.getIdentifier` | `rep:readProperties`
|
+| `Node.getReferences` | `rep:readProperties`
|
+| `Node.getWeakReferences` | `rep:readProperties`
|
+| `Node.getPrimaryItem` | `jcr:read`
|
+| `Node.getPrimaryNodeType` | `rep:readProperties` on
jcr:primaryType |
+| `Node.getMixinNodeTypes` | `rep:readProperties` on
jcr:mixinTypes |
+| `Property.getValue` | `rep:readProperties`
|
+| `Property.getValues` | `rep:readProperties`
|
+| `Property.get*` | `rep:readProperties`
|
+| `Property.getNode` | `rep:readProperties`,
`rep:readNodes` on ref-target |
+| `Session.exportSystemView` | `jcr:read`
|
+| `Session.exportDocumentView` | `jcr:read`
|
+
+#### Writing Properties
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `Node.setProperty` (new) | `rep:addProperties`
|
+| `Node.setProperty` (existing) | `rep:alterProperties`
|
+| `Property.setValue` | `rep:alterProperties`
|
+| `Property.remove` | `rep:removeProperties`
|
+| `Node.setProperty(String, null)` | `rep:removeProperties`
|
+| `JackrabbitSession.removeItem` (item is a property) | `rep:removeProperties`
|
+
+#### Writing Nodes
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `Node.addNode(String)` | `jcr:addChildNodes` (on
parent) |
+| `Node.remove` | `jcr:removeChildNodes` (on
parent), `jcr:removeNode` |
+| `JackrabbitSession.removeItem` (if item is a node) | `jcr:removeChildNodes`
(on parent), `jcr:removeNode` |
+| `Node.addNode(String, String)` | `jcr:addChildNodes` (on
parent), `jcr:nodeTypeManagement` |
+| `Node.setPrimaryType` | `jcr:nodeTypeManagement`
|
+| `Node.addMixin` | `jcr:nodeTypeManagement`
|
+| `Node.removeMixin` | `jcr:nodeTypeManagement`
|
+| `Node.orderBefore` | `jcr:addChildNodes` and
`jcr:removeChildNodes` (on parent) |
+
+#### Move, Copy and Import
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `Session.move` | `jcr:removeChildNodes`
(source parent) and `jcr:addChildNodes` (target parent) |
+| `Workspace.move` | `jcr:removeChildNodes`
(source parent) and `jcr:addChildNodes` (target parent) |
+| `Workspace.copy` | same privileges as if items
would be created using regular API calls |
+| `Session.importXml` | same privileges as if items
would be created using regular API calls |
+| `Workspace.importXml` | same privileges as if items
would be created using regular API calls |
+
+#### Version Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `VersionManager.isCheckedOut` | `rep:readNodes` on
versionable node and `rep:readProperties` on its property `jcr:isCheckedOut` |
+| `VersionManager.getVersionHistory` | `rep:readNodes` on
versionable node and `rep:readProperties` on its property `jcr:versionHistory` |
+| `VersionManager.getBaseVersion` | `rep:readNodes` on
versionable node and `rep:readProperties` on its property `jcr:baseVersion` |
+| `VersionManager.checkin` | `jcr:versionManagement` on
versionable node |
+| `VersionManager.checkout` | `jcr:versionManagement` on
versionable node |
+| `VersionManager.checkpoint` | `jcr:versionManagement` on
versionable node |
+| `VersionManager.restore` | _TODO_
|
+| `VersionManager.restoreByLabel` | _TODO_
|
+| `VersionManager.merge` | _TODO_
|
+| `VersionManager.cancelMerge` | _TODO_
|
+| `VersionManager.doneMerge` | _TODO_
|
+| `VersionManager.createConfiguration` | _TODO_
|
+| `VersionManager.setActivity` | _TODO_
|
+| `VersionManager.createActivity` | _TODO_
|
+| `VersionManager.removeActivity` | _TODO_
|
+| `VersionHistory.*` (read) | `rep:readNodes` on
versionable node |
+| `VersionHistory.removeVersion` | `jcr:versionManagement` on
versionable node |
+| `Version.*` (read) | `rep:readNodes` on
versionable node |
+
+NOTE: since Oak 1.0 read/write access to version storage is defined by
accessibility of the versionable node and _not_ to the version store items.
+
+#### Lock Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `LockManager.getLock` = `Node.getLock` | `jcr:read`
|
+| `LockManager.isLocked` = `Node.isLocked` | `jcr:read`
|
+| `LockManager.holdsLock` = `Node.holdsLock` | `jcr:read`
|
+| `LockManager.lock` = `Node.lock` | `jcr:lockManagement`
|
+| `LockManager.unlock` = `Node.unlock` | `jcr:lockManagement`
|
+
+#### Access Control Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `AccessControlManager.getApplicablePolicies` | `jcr:readAccessControl`
|
+| `AccessControlManager.getPolicies` | `jcr:readAccessControl`
|
+| `AccessControlManager.getEffectivePolicies` | `jcr:readAccessControl`
|
+| `AccessControlManager.setPolicy` | `jcr:modifyAccessControl`
|
+| `AccessControlManager.removePolicy` | `jcr:modifyAccessControl`
|
+| `PrivilegeManager.registerPrivilege` | `rep:privilegeManagent` at
'null' path |
+
+#### User Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `UserManager.getAuthorizable` | `jcr:read`
|
+| `UserManager.findAuthorizable` | `jcr:read`
|
+| `UserManager.createUser` | `rep:userManagement`
|
+| `UserManager.createSystemUser` | `rep:userManagement`
|
+| `UserManager.createGroup` | `rep:userManagement`
|
+| `User.isDisabled` | `jcr:read`
|
+| `User.getDisabledReason` | `jcr:read`
|
+| `User.disable` | `rep:userManagement`
|
+| `User.changePassword` | `rep:userManagement`
|
+| `User.getCredentials` | `jcr:read`
|
+| `User.getImpersonation` | `jcr:read`
|
+| `Impersonation.getImpersonators` | `jcr:read`
|
+| `Impersonation.allows` | `jcr:read`
|
+| `Impersonation.grantImpersonation` | `rep:userManagement`
|
+| `Impersonation.revokeImpersonation` | `rep:userManagement`
|
+| `Group.getDeclaredMembers` | `jcr:read`
|
+| `Group.getMembers` | `jcr:read`
|
+| `Group.isDeclaredMember` | `jcr:read`
|
+| `Group.isMember` | `jcr:read`
|
+| `Group.addMember` | `rep:userManagement`
|
+| `Group.removeMember` | `rep:userManagement`
|
+| `Authorizable.getID` | `jcr:read`
|
+| `Authorizable.getPrincipal` | `jcr:read`
|
+| `Authorizable.getPath` | `jcr:read`
|
+| `Authorizable.declaredMemberOf` | `jcr:read` (on groups listing
this user/group as member) |
+| `Authorizable.memberOf` | `jcr:read` (on groups listing
this user/group as member) |
+| `Authorizable.remove` | `rep:userManagement`
|
+| `Authorizable.getPropertyNames` | `jcr:read` or
`rep:readProperties` (no relPath) |
+| `Authorizable.hasProperty` | `jcr:read` or
`rep:readProperties` (no relPath) |
+| `Authorizable.getProperty` | `jcr:read` or
`rep:readProperties` (no relPath) | |
+| `Authorizable.setProperty` (no relPath) | `rep:addProperties` and/or
`rep:alterProperties` |
+| `Authorizable.setProperty` (with relPath | `rep:addProperties` and/or
`rep:alterProperties`, `jcr:addChildNodes` |
+| `Authorizable.removeProperty` | `rep:removeProperties`
|
+
+#### LifeCycle Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `Node.followLifecycleTransition` | `jcr:lifecycleManagement`
|
+
+#### Retention Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `RetentionManager.getHolds` | `jcr:read`
|
+| `RetentionManager.getRetentionPolicy` | `jcr:read`
|
+| `RetentionManager.addHold` | `jcr:retentionManagement`
|
+| `RetentionManager.removeHold` | `jcr:retentionManagement`
|
+| `RetentionManager.setRetentionPolicy` | `jcr:retentionManagement`
|
+| `RetentionManager.removeRetentionPolicy` | `jcr:retentionManagement`
|
+
+#### Namespace Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `NamespaceRegistry.getPrefix` | `jcr:read`
|
+| `NamespaceRegistry.getPrefixes` | `jcr:read`
|
+| `NamespaceRegistry.getURI` | `jcr:read`
|
+| `NamespaceRegistry.getURIs` | `jcr:read`
|
+| `NamespaceRegistry.registerNamespace` | `jcr:namespaceManagement`
|
+| `NamespaceRegistry.unregisterNamespace` | `jcr:namespaceManagement`
|
+
+#### NodeType Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `NodeTypeManager.hasNodeType` | `jcr:read`
|
+| `NodeTypeManager.getNodeType` | `jcr:read`
|
+| `NodeTypeManager.getAllNodeTypes` | `jcr:read`
|
+| `NodeTypeManager.getPrimaryNodeTypes` | `jcr:read`
|
+| `NodeTypeManager.getMixinNodeTypes` | `jcr:read`
|
+| `NodeTypeManager.createNodeTypeTemplate` | NA
|
+| `NodeTypeManager.createNodeDefinitionTemplate` | NA
|
+| `NodeTypeManager.createPropertyDefinitionTemplate` | NA
|
+| `NodeTypeManager.registerNodeType` |
`jcr:nodeTypeDefinitionManagement` |
+| `NodeTypeManager.registerNodeTypes` |
`jcr:nodeTypeDefinitionManagement` |
+| `NodeTypeManager.unregisterNodeType` |
`jcr:nodeTypeDefinitionManagement` |
+| `NodeTypeManager.unregisterNodeTypes` |
`jcr:nodeTypeDefinitionManagement` |
+
+#### Privilege Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `PrivilegeManager.getRegisteredPrivileges` | `jcr:read`
|
+| `PrivilegeManager.getPrivilege` | `jcr:read`
|
+| `PrivilegeManager.registerPrivilege` | `rep:privilegeManagement`
|
+
+#### Workspace Management
+
+| API Call | Privilege(s)
|
+|----------------------------------------------|--------------------------------|
+| `Workspace.createWorkspace` | `jcr:workspaceManagement`
|
+| `Workspace.deleteWorkspace` | `jcr:workspaceManagement`
|