我几乎找不到有关如何为多个用户设计和构建存储库的任何文档。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
其实Victor是因为JackRabbit是一个Java Content Repository的实现 - 这是一个规范。 JCR ... JackRabbit ....明白了吗? – MJB 2011-06-16 06:45:35