Apenas puedo encontrar documentación sobre cómo diseñar y crear un repositorio para múltiples usuarios.Administración de usuarios de Jackrabbit
Soy bastante nuevo en Jackrabbit y siempre estaba usando credenciales de usuario maestro para crear un repositorio al que accediera solo un usuario maestro.
Ahora necesito un repositorio compartido por miles de usuarios y cada usuario trabaja con sus nodos y no tiene permisos para los demás.
El SimpleAccessManager es bastante simple:
public boolean isGranted(ItemId id, int permissions) throws RepositoryException {
checkInitialized();
if (system) {
// system has always all permissions
return true;
} else if (anonymous) {
// anonymous is always denied WRITE & REMOVE permissions
if ((permissions & WRITE) == WRITE
|| (permissions & REMOVE) == REMOVE) {
return false;
}
}
return true;
}
Parece que no se puede crear un repositorio como multi-usuario con SimpleLoginModule y SimpleAccessManager. Porque diferencia sólo entre ADMIN y los usuarios anónimos que pueden leer todo, pero no puede escribir ...
Así que uno tiene que usar DefaultAccessManager y tal vez hacer algo como esto:
Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
UserManager um = ((JackrabbitSession) session).getUserManager();
User user = um.createUser("john", "doe");
/* And assign some ALC as follows... And then play with it like this, which really sucks without proper documentation, one has to reverse engineer everything, wtf */
AccessControlManager acm = session.getAccessControlManager();
AccessControlPolicyIterator it = acm.getApplicablePolicies(testRootNode.getPath());
while (it.hasNext()) {
AccessControlPolicy acp = it.nextAccessControlPolicy();
Privilege[] privileges = new Privilege[]{acm.privilegeFromName(Privilege.JCR_WRITE)};
((AccessControlList)acp).addAccessControlEntry(new PrincipalImpl(user.getUserID()), privileges);
acm.setPolicy(testRootNode.getPath(), acp);
}
El depósito será accesible a través de OpenCMIS que proporciona credenciales de usuario del cliente.
EDIT: esto es lo que estaba buscando AccessControl
En realidad Victor es porque JackRabbit es una implementación de un Repositorio de contenido de Java, que es una especificación. JCR ... JackRabbit ... ¿entiendes? – MJB