Major refactoring of Argeo CMS UI
[gpl/argeo-suite.git] / org.argeo.suite.core / src / org / argeo / suite / SuiteUtils.java
index 18c91a179a7bd0e090ff338d1d1313e5844015ba..e67339182e34ba818ef293d99d5ac44b97894f3e 100644 (file)
@@ -1,5 +1,8 @@
 package org.argeo.suite;
 
+import java.util.HashSet;
+import java.util.Set;
+
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -8,7 +11,8 @@ import javax.jcr.security.Privilege;
 import javax.naming.ldap.LdapName;
 import javax.security.auth.x500.X500Principal;
 
-import org.argeo.cms.auth.CmsSession;
+import org.argeo.api.NodeConstants;
+import org.argeo.api.cms.CmsSession;
 import org.argeo.entity.EntityType;
 import org.argeo.jackrabbit.security.JackrabbitSecurityUtils;
 import org.argeo.jcr.JcrException;
@@ -38,6 +42,8 @@ public class SuiteUtils {
                                JackrabbitSecurityUtils.denyPrivilege(adminSession, userNode.getPath(), SuiteRole.coworker.dn(),
                                                Privilege.JCR_READ);
                                JcrUtils.addPrivilege(adminSession, userNode.getPath(), new X500Principal(userDn.toString()).getName(),
+                                               Privilege.JCR_READ);
+                               JcrUtils.addPrivilege(adminSession, userNode.getPath(), NodeConstants.ROLE_USER_ADMIN,
                                                Privilege.JCR_ALL);
                        } else {
                                userNode = usersBase.getNode(uid);
@@ -93,4 +99,24 @@ public class SuiteUtils {
 
        }
 
+       public static Set<String> extractRoles(String[] semiColArr) {
+               Set<String> res = new HashSet<>();
+               // TODO factorize and make it more robust
+               final String rolesPrefix = "roles:=\"";
+               // first one is layer id
+               for (int i = 1; i < semiColArr.length; i++) {
+                       if (semiColArr[i].startsWith(rolesPrefix)) {
+                               String rolesStr = semiColArr[i].substring(rolesPrefix.length());
+                               // remove last "
+                               rolesStr = rolesStr.substring(0, rolesStr.lastIndexOf('\"'));
+                               // TODO support AND (&) as well
+                               String[] roles = rolesStr.split("\\|");// OR (|)
+                               for (String role : roles) {
+                                       res.add(role.trim());
+                               }
+                       }
+               }
+               return res;
+       }
+
 }