【发布时间】:2011-09-16 00:03:00
【问题描述】:
我几乎找不到任何关于如何为多个用户设计和构建存储库的文档。
我是 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 .... 明白了吗?
标签: java jackrabbit user-management jcr