5

我几乎找不到任何关于如何为多个用户设计和构建存储库的文档。

我对 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 访问该存储库,该 OpenCMIS 提供来自客户端的用户凭据。

编辑:这就是我正在寻找的AccessControl

4

3 回答 3

2

如果您需要一个具有“数千名用户”的存储库,您最好使用 JAAS 登录模块,该模块基于某些外部系统(LDAP 或数据库等)对用户进行身份验证并提供角色。当您使用工作区名称和可选凭据登录到存储库时,将返回一个会话。正如您从这里看到的那样:http ://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Session.html会话仅公开用户有权访问的节点.

如果您需要应用不同的访问控制,显然默认的 SimpleAccessManager 对您来说是不够的,因此您可能需要实现自己的 AccessManager。

于 2011-06-16T21:10:49.653 回答
2

我不确定所有必要的步骤是什么,但您可以查看基于 Apache JackRabbit 的 Hippo CMS 存储库。它是一个开源 CMS 和内容存储库,已经实现了基于域和方面的自己的用户管理。

您可以在此处找到 Hippo CMS 的安全部分的来源。

于 2011-06-16T19:18:08.317 回答
0

从文档中,

安全配置元素用于指定存储库的身份验证和授权设置

有关更多信息,请参阅JackRabbit 安全配置文档

于 2011-06-16T01:19:38.063 回答