Управление пользователями Jackrabbit

Я с трудом могу найти какую-либо документацию о том, как проектировать и создавать репозиторий для нескольких пользователей.

Я довольно новичок в Jackrabbit, и я всегда использовал учетные данные одного главного пользователя для создания репозитория, к которому имел доступ только один главный пользователь.

Теперь мне нужен репозиторий, который используется тысячами пользователей, и каждый пользователь работает со своими узлами и не работает. не имеют разрешений для других.

SimpleAccessManager довольно прост:

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;
}

Похоже, что нельзя создать такой многопользовательский репозиторий с помощью SimpleLoginModule и SimpleAccessManager. Потому что он различает только ADMIN и анонимных пользователей, которые могут читать все, но не могут писать ...

Таким образом, нужно использовать DefaultAccessManager и, возможно, сделать что-то вроде этого:

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); 
} 

Репозиторий будет доступен через OpenCMIS, который предоставляет учетные данные пользователя от клиента.

РЕДАКТИРОВАТЬ: это то, что я искал AccessControl

5
задан lisak 19 June 2011 в 00:13
поделиться