複数のユーザー向けのリポジトリを設計および構築する方法に関するドキュメントはほとんど見つかりません。
私は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を探していたものです