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 al...@apache.org on 2014/04/24 13:58:15 UTC

svn commit: r1589684 - in /jackrabbit/oak/branches/1.0: ./ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java

Author: alexparvulescu
Date: Thu Apr 24 11:58:14 2014
New Revision: 1589684

URL: http://svn.apache.org/r1589684
Log:
OAK-1765 An admin user should be able to unlock any node
 - merged to 1.0 branch


Modified:
    jackrabbit/oak/branches/1.0/   (props changed)
    jackrabbit/oak/branches/1.0/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java

Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
  Merged /jackrabbit/oak/trunk:r1589682

Modified: jackrabbit/oak/branches/1.0/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java?rev=1589684&r1=1589683&r2=1589684&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java (original)
+++ jackrabbit/oak/branches/1.0/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java Thu Apr 24 11:58:14 2014
@@ -30,6 +30,8 @@ import javax.jcr.lock.Lock;
 import javax.jcr.lock.LockException;
 import javax.jcr.lock.LockManager;
 
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.oak.api.Tree.Status;
 import org.apache.jackrabbit.oak.jcr.session.SessionContext;
 import org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate;
@@ -186,7 +188,7 @@ public class LockManagerImpl implements 
                     return true;
                 } else if (sessionContext.getAttributes().get(RELAXED_LOCKING) == TRUE) {
                     String user = sessionContext.getSessionDelegate().getAuthInfo().getUserID();
-                    return node.isLockOwner(user);
+                    return node.isLockOwner(user) || isAdmin(sessionContext, user);
                 } else {
                     return false;
                 }
@@ -194,6 +196,19 @@ public class LockManagerImpl implements 
         });
     }
 
+    private boolean isAdmin(SessionContext sessionContext, String user) {
+        try {
+            Authorizable a = sessionContext.getUserManager().getAuthorizable(
+                    user);
+            if (a != null && !a.isGroup()) {
+                return ((User) a).isAdmin();
+            }
+        } catch (RepositoryException e) {
+            // ?
+        }
+        return false;
+    }
+
     private <T> T perform(SessionOperation<T> operation)
             throws RepositoryException {
         return delegate.perform(operation);