我幾乎找不到有關如何爲多個用戶設計和構建存儲庫的任何文檔。Jackrabbit用戶管理
我是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 ....明白了嗎? – MJB 2011-06-16 06:45:35