5

複数のユーザー向けのリポジトリを設計および構築する方法に関するドキュメントはほとんど見つかりません。

私はJackrabbitにまったく慣れておらず、常に1人のマスターユーザーの資格情報を使用して、1人のマスターユーザーだけがアクセスするリポジトリを構築していました。

ここで、数千人のユーザーが共有するリポジトリが必要です。各ユーザーは自分のノードで作業し、他のユーザーへのアクセス許可はありません。

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を探していたものです

4

3 に答える 3

2

「数千のユーザー」を含むリポジトリが必要な場合は、外部システム (LDAP やデータベースなど) に基づいてユーザーを認証し、ロールを提供する JAAS ログイン モジュールを使用することをお勧めします。ワークスペース名とオプションの認証情報を使用してリポジトリにログインすると、セッションが返されます。そして、ここからわかるように: 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

ドキュメントから、

security 構成エレメントは、リポジトリーの認証および許可設定を指定するために使用されます

詳細については、 JackRabbit セキュリティ構成ドキュメントを参照してください。

于 2011-06-16T01:19:38.063 に答える