2

Jackrabbit 2.2.7 を使用して、xml ドキュメントのリポジトリを開発しています。

リポジトリ用に多数のユーザーを作成し、それらに対して何らかの読み取り専用および読み取り/書き込みアクセス権限を適用したいと考えています。こちら で説明されているように、リソース ベースの ACL を使用しました。読み取り専用許可は魅力として機能します。ただし、ユーザーがバージョン管理可能なノード ( ) を作成/削除しようとすると、mix:versionable可能な限り最高の特権Privilege.JCR_ALL. これまでのところ、バージョン管理されたノードへの変更は実際には単純ではないことがわかりました。Jackrabbit では、複数のノードにまたがっており/jcr:system/jcr:versionStorage、そのうちの 1 つです。/jcr:system/ユーザーが管理ユーザー自身でないと、 とその子ノードを変更できないようです。

だから私の質問は

  • a) 通常のユーザーがバージョン管理可能なノードを変更できるようにする方法はありますか?
  • b) jackrabbit で複数の管理者ユーザーを作成する方法はありますか (ポインター、ウィキ、コード スニペット)?

のセキュリティ セクションは次のrepository.xmlとおりです。

<Security appName="Jackrabbit">
    <SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager" 
        workspaceName="security">
        <!-- <WorkspaceAccessManager class="..."/> -->
        <!-- <param name="config" value="${rep.home}/security.xml"/> -->
    </SecurityManager>

    <AccessManager 
        class="org.apache.jackrabbit.core.security.DefaultAccessManager">
        <!-- <param name="config" value="${rep.home}/access.xml"/> -->
    </AccessManager>

    <LoginModule 
        class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
       <!--
          anonymous user name ('anonymous' is the default value)
        -->
       <param name="anonymousId" value="anonymous"/>
       <!--
          administrator user id (default value if param is missing is 'admin')
        -->
       <param name="adminId" value="admin"/>
    </LoginModule>
</Security>

ユーザーを作成してアクセス制御を有効にする方法は次のとおりです。

    {
        ...
        JackrabbitSession js = (JackrabbitSession) session;
        UserManager um = js.getUserManager();
        Authorizable grp = um.getAuthorizable("usergroup");
        Group userGroup = null;
        if(grp == null){
            userGroup = um.createGroup("usergroup");
        }else{
            userGroup = (Group) grp;
        }

        User user = um.createUser(newUserName, newUserPass);
        userGroup.addMember(user);

        Node node = session.getNode("/root");           

        AccessControlManager acm = session.getAccessControlManager();
        AccessControlList acl = getList(acm, node.getPath());

        Privilege[] privileges = null ;
        if(privilege.equals("r")){

            privileges = new Privilege[]
            {
                acm.privilegeFromName(Privilege.JCR_READ),
                acm.privilegeFromName(Privilege.JCR_LOCK_MANAGEMENT)
            };

        }else if(privilege.equals("rw")){
            privileges = new Privilege[]
            {

                acm.privilegeFromName(Privilege.JCR_ALL)
            };
        }else{

            return;
        }
        acl.addAccessControlEntry(new PrincipalImpl(user.getID()), privileges);
        acm.setPolicy(node.getPath(), acl);

        session.save();
 }
4

1 に答える 1

1

内部の内容を/jcr:system/jcr:versionStorage直接変更することはできません。バージョン ストレージ内のバージョンを作成、削除、またはラベル付けするには、 VersionManagerインターフェイスを使用する必要があります。バージョン ストレージに適用される追加のアクセス制御がないため、バージョン管理可能なノードへの書き込みアクセス権を持つすべてのユーザーがそれを実行できるはずです。

バージョン管理可能なノード自体は、チェックイン時に読み取り専用であることに注意してください。書き込み可能にするには、バージョン管理可能なノードを明示的にチェックアウトする必要があります。

于 2011-12-03T09:45:55.150 に答える