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 md...@apache.org on 2012/08/31 17:48:38 UTC

svn commit: r1379484 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java

Author: mduerig
Date: Fri Aug 31 15:48:37 2012
New Revision: 1379484

URL: http://svn.apache.org/viewvc?rev=1379484&view=rev
Log:
OAK-50: Implement User Management
allow passing in additional principals to RootImpl.commit. 
TODO: we need a cleaner way to handle this

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java?rev=1379484&r1=1379483&r2=1379484&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java Fri Aug 31 15:48:37 2012
@@ -18,6 +18,7 @@
  */
 package org.apache.jackrabbit.oak.core;
 
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.List;
@@ -163,7 +164,7 @@ public class RootImpl implements Root {
         rebase(conflictHandler);
         purgePendingChanges();
         CommitFailedException exception = Subject.doAs(
-                subject, new PrivilegedAction<CommitFailedException>() {
+                getCombinedSubject(), new PrivilegedAction<CommitFailedException>() {
                     @Override
                     public CommitFailedException run() {
                         try {
@@ -180,6 +181,22 @@ public class RootImpl implements Root {
         refresh();
     }
 
+    // TODO: find a better solution for passing in additional principals
+    private Subject getCombinedSubject() {
+        Subject accSubject = Subject.getSubject(AccessController.getContext());
+        if (accSubject == null) {
+            return subject;
+        }
+        else {
+            Subject combinedSubject = new Subject(false,
+                    subject.getPrincipals(), subject.getPublicCredentials(), subject.getPrivateCredentials());
+            combinedSubject.getPrincipals().addAll(accSubject.getPrincipals());
+            combinedSubject.getPrivateCredentials().addAll(accSubject.getPrivateCredentials());
+            combinedSubject.getPublicCredentials().addAll((accSubject.getPublicCredentials()));
+            return combinedSubject;
+        }
+    }
+
     @Override
     public boolean hasPendingChanges() {
         return !getBaseState().equals(rootTree.getNodeState());