On 3 Aug 2009, at 18:44, Ian Boston wrote:

Hi,

Is there a standard way to control who can modify a group in the Jackrabbit User Manager Impl.

IIUC, there appears to be a Group (default GroupAdmin) that grant the user write access to *all* groups, but no way of granting a user administrative rights over a subset of all groups.

Is this correct, or have a missed something ?

Ian


On the basis that delegated administration of selected groups is not possible, would the following patch be a "safe" thing to do in the UserAccessControlProvider. NB, this is *not* a request to patch Jackrabbit code, its just question regarding the sanity of the approach.

in UserAccessControlProvider#CompiledPermissionsImpl.buildResult(...)

            } else if (groupsPath.equals(abs2Path)) {
                /*
                below group-tree:
                - test if the user is group-administrator.
                */
                if (isGroupAdmin) {
                    allows = Permission.ALL;
                    if (calcPrivs) {
                        privs |= PrivilegeRegistry.WRITE;
                    }
                } else {

// new code to allow group administration delegation

// check the group node to see if there are a list of admin groups.
                  Node node = (NodeImpl) getExistingNode(path);
                  if ( node.hasProperty(GROUPS_PROPERTY) ) {
Property groups = node.getProperty(GROUPS_PROPERTY);
                    for ( Value group : groups.getValues() ) {
                      String groupName = group.getString();
                      if ( containsGroup(userPrincipals, groupName)) {
                        allows = Permission.ALL;
                        if (calcPrivs) {
                            privs |= PrivilegeRegistry.WRITE;
                        }
                        break;
                      }
                    }
                  }
// end new code
                }


            } // else outside of user/group tree -> read only.
return new Result(allows, denies, privs, PrivilegeRegistry.NO_PRIVILEGE);
        }

Ian

Reply via email to