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 2012/09/26 12:23:31 UTC
svn commit: r1390375 - in
/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user:
AuthorizableImpl.java AuthorizableIterator.java GroupImpl.java
ImpersonationImpl.java UserImpl.java UserManagerImpl.java
Author: angela
Date: Wed Sep 26 10:23:30 2012
New Revision: 1390375
URL: http://svn.apache.org/viewvc?rev=1390375&view=rev
Log:
OAK-50 : Implement User Management (WIP)
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableIterator.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/ImpersonationImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableImpl.java?rev=1390375&r1=1390374&r2=1390375&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableImpl.java Wed Sep 26 10:23:30 2012
@@ -37,17 +37,13 @@ import org.apache.jackrabbit.commons.ite
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.security.user.MembershipProvider;
-import org.apache.jackrabbit.oak.spi.security.user.Type;
import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
import org.apache.jackrabbit.util.Text;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * AuthorizableImpl... TODO
- *
- * FIXME: get rid of keeping both tree AND node fields. this is workaround for
- * missing conversion from Node to Tree and vice version in OAK-JCR
+ * AuthorizableImpl...
*/
abstract class AuthorizableImpl implements Authorizable, UserConstants {
@@ -56,14 +52,13 @@ abstract class AuthorizableImpl implemen
*/
private static final Logger log = LoggerFactory.getLogger(AuthorizableImpl.class);
- private final Tree tree;
+ private final String id;
private final UserManagerImpl userManager;
-
private Node node;
private int hashCode;
- AuthorizableImpl(Tree tree, UserManagerImpl userManager) throws RepositoryException {
- this.tree = tree;
+ AuthorizableImpl(String id, Tree tree, UserManagerImpl userManager) throws RepositoryException {
+ this.id = id;
this.userManager = userManager;
checkValidTree(tree);
@@ -81,7 +76,7 @@ abstract class AuthorizableImpl implemen
*/
@Override
public String getID() {
- return userManager.getUserProvider().getAuthorizableId(tree, (isGroup()) ? Type.GROUP : Type.USER);
+ return id;
}
/**
@@ -111,7 +106,7 @@ abstract class AuthorizableImpl implemen
throw new RepositoryException("The administrator cannot be removed.");
}
userManager.onRemove(this);
- tree.remove();
+ getTree().remove();
}
/**
@@ -270,7 +265,7 @@ abstract class AuthorizableImpl implemen
AuthorizableImpl otherAuth = (AuthorizableImpl) obj;
try {
Node node = getNode();
- return isGroup() == otherAuth.isGroup() && node.isSame(otherAuth.node);
+ return isGroup() == otherAuth.isGroup() && node.isSame(otherAuth.getNode());
} catch (RepositoryException e) {
// should not occur -> return false in this case.
}
@@ -284,17 +279,18 @@ abstract class AuthorizableImpl implemen
@Override
public String toString() {
String typeStr = (isGroup()) ? "Group '" : "User '";
- return new StringBuilder().append(typeStr).append(getID()).append('\'').toString();
+ return new StringBuilder().append(typeStr).append(id).append('\'').toString();
}
//--------------------------------------------------------------------------
/**
* @return The node associated with this authorizable instance.
+ * @throws javax.jcr.RepositoryException
*/
@Nonnull
Node getNode() throws RepositoryException {
if (node == null) {
- String jcrPath = userManager.getNamePathMapper().getJcrPath(tree.getPath());
+ String jcrPath = userManager.getNamePathMapper().getJcrPath(getTree().getPath());
node = userManager.getSession().getNode(jcrPath);
}
return node;
@@ -302,6 +298,10 @@ abstract class AuthorizableImpl implemen
@Nonnull
Tree getTree() {
+ Tree tree = userManager.getUserProvider().getAuthorizable(id);
+ if (tree == null) {
+ throw new IllegalStateException("Authorizable not associated with an existing tree");
+ }
return tree;
}
@@ -323,6 +323,7 @@ abstract class AuthorizableImpl implemen
*/
@Nonnull
String getPrincipalName() throws RepositoryException {
+ Tree tree = getTree();
if (tree.hasProperty(REP_PRINCIPAL_NAME)) {
return tree.getProperty(REP_PRINCIPAL_NAME).getValue().getString();
} else {
@@ -435,7 +436,7 @@ abstract class AuthorizableImpl implemen
}
MembershipProvider mMgr = userManager.getMembershipProvider();
- Iterator<String> oakPaths = mMgr.getMembership(tree, includeInherited);
+ Iterator<String> oakPaths = mMgr.getMembership(getTree(), includeInherited);
if (oakPaths.hasNext()) {
AuthorizableIterator groups = AuthorizableIterator.create(oakPaths, userManager, UserManager.SEARCH_TYPE_GROUP);
return new RangeIteratorAdapter(groups, groups.getSize());
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableIterator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableIterator.java?rev=1390375&r1=1390374&r2=1390375&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableIterator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/AuthorizableIterator.java Wed Sep 26 10:23:30 2012
@@ -17,7 +17,6 @@
package org.apache.jackrabbit.oak.jcr.security.user;
import java.util.Iterator;
-import javax.annotation.Nullable;
import javax.jcr.RangeIterator;
import javax.jcr.RepositoryException;
@@ -103,7 +102,7 @@ class AuthorizableIterator implements It
}
@Override
- public Authorizable apply(@Nullable String oakPath) {
+ public Authorizable apply(String oakPath) {
String jcrPath = userManager.getNamePathMapper().getJcrPath(oakPath);
try {
Authorizable a = userManager.getAuthorizableByPath(jcrPath);
@@ -126,7 +125,7 @@ class AuthorizableIterator implements It
}
@Override
- public Authorizable apply(@Nullable Tree authorizableTree) {
+ public Authorizable apply(Tree authorizableTree) {
try {
return userManager.getAuthorizable(authorizableTree);
} catch (RepositoryException e) {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImpl.java?rev=1390375&r1=1390374&r2=1390375&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/GroupImpl.java Wed Sep 26 10:23:30 2012
@@ -46,8 +46,8 @@ class GroupImpl extends AuthorizableImpl
*/
private static final Logger log = LoggerFactory.getLogger(GroupImpl.class);
- GroupImpl(Tree tree, UserManagerImpl userManager) throws RepositoryException {
- super(tree, userManager);
+ GroupImpl(String id, Tree tree, UserManagerImpl userManager) throws RepositoryException {
+ super(id, tree, userManager);
}
@Override
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/ImpersonationImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/ImpersonationImpl.java?rev=1390375&r1=1390374&r2=1390375&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/ImpersonationImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/ImpersonationImpl.java Wed Sep 26 10:23:30 2012
@@ -190,7 +190,7 @@ class ImpersonationImpl implements Imper
return princNames;
}
- private void updateImpersonatorNames(Set<String> principalNames) {
+ private void updateImpersonatorNames(Set<String> principalNames) throws RepositoryException {
String[] pNames = principalNames.toArray(new String[principalNames.size()]);
if (pNames.length == 0) {
user.setProtectedProperty(REP_PRINCIPAL_NAME, (String) null);
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserImpl.java?rev=1390375&r1=1390374&r2=1390375&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserImpl.java Wed Sep 26 10:23:30 2012
@@ -42,8 +42,8 @@ class UserImpl extends AuthorizableImpl
*/
private static final Logger log = LoggerFactory.getLogger(UserImpl.class);
- UserImpl(Tree tree, UserManagerImpl userManager) throws RepositoryException {
- super(tree, userManager);
+ UserImpl(String id, Tree tree, UserManagerImpl userManager) throws RepositoryException {
+ super(id, tree, userManager);
}
void checkValidTree(Tree tree) throws RepositoryException {
@@ -148,7 +148,7 @@ class UserImpl extends AuthorizableImpl
* @see org.apache.jackrabbit.api.security.user.User#isDisabled()
*/
@Override
- public boolean isDisabled() {
+ public boolean isDisabled() throws RepositoryException {
return getTree().hasProperty(REP_DISABLED);
}
@@ -156,7 +156,7 @@ class UserImpl extends AuthorizableImpl
* @see org.apache.jackrabbit.api.security.user.User#getDisabledReason()
*/
@Override
- public String getDisabledReason() {
+ public String getDisabledReason() throws RepositoryException {
PropertyState disabled = getTree().getProperty(REP_DISABLED);
if (disabled != null) {
return disabled.getValue().getString();
@@ -166,11 +166,11 @@ class UserImpl extends AuthorizableImpl
//--------------------------------------------------------------------------
- void setProtectedProperty(String oakName, String value) {
+ void setProtectedProperty(String oakName, String value) throws RepositoryException {
getUserManager().getUserProvider().setProtectedProperty(getTree(), oakName, value, PropertyType.STRING);
}
- void setProtectedProperty(String oakName, String[] values) {
+ void setProtectedProperty(String oakName, String[] values) throws RepositoryException {
getUserManager().getUserProvider().setProtectedProperty(getTree(), oakName, values, PropertyType.STRING);
}
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java?rev=1390375&r1=1390374&r2=1390375&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java Wed Sep 26 10:23:30 2012
@@ -80,7 +80,7 @@ public class UserManagerImpl implements
Authorizable authorizable = null;
Tree tree = getUserProvider().getAuthorizable(id);
if (tree != null) {
- authorizable = getAuthorizable(tree);
+ authorizable = getAuthorizable(id, tree);
}
return authorizable;
}
@@ -149,7 +149,7 @@ public class UserManagerImpl implements
setPrincipal(userTree, principal);
setPassword(userTree, password, true);
- User user = new UserImpl(userTree, this);
+ User user = new UserImpl(userID, userTree, this);
onCreate(user, password);
log.debug("User created: " + userID);
@@ -188,7 +188,7 @@ public class UserManagerImpl implements
Tree groupTree = getUserProvider().createGroup(groupID, intermediatePath);
setPrincipal(groupTree, principal);
- Group group = new GroupImpl(groupTree, this);
+ Group group = new GroupImpl(groupID, groupTree, this);
onCreate(group);
log.debug("Group created: " + groupID);
@@ -340,12 +340,20 @@ public class UserManagerImpl implements
if (tree == null) {
return null;
}
+ return getAuthorizable(userProvider.getAuthorizableId(tree), tree);
+ }
+
+ @CheckForNull
+ private Authorizable getAuthorizable(String id, Tree tree) throws RepositoryException {
+ if (id == null || tree == null) {
+ return null;
+ }
if (userProvider.isAuthorizableType(tree, Type.USER)) {
- return new UserImpl(tree, this);
+ return new UserImpl(userProvider.getAuthorizableId(tree), tree, this);
} else if (userProvider.isAuthorizableType(tree, Type.GROUP)) {
- return new GroupImpl(tree, this);
+ return new GroupImpl(userProvider.getAuthorizableId(tree), tree, this);
} else {
- throw new RepositoryException("Not a user or group tree " + tree.getPath() + ".");
+ throw new RepositoryException("Not a user or group tree " + tree.getPath() + '.');
}
}