短篇小說:我正在考慮將此行動授予所有消費者。安全方面,這會是多麼愚蠢?我應該向alfresco消費者授予base.ReadPermissions嗎?
長的故事:
我想用OpenCmis API來獲取用戶的允許的動作,在給定的露天資源。
這樣,我將決定我應該啓用或渲染哪些UI控件。我創建了一個函數,用於掃描用戶在該資源上允許的操作,並檢查給定的操作是否在其中,例如CAN_CHECK_OUT或CAN_GET_CONTENT_STREAM。
我的函數的工作就像:
private static Boolean canUserPerformAction_(Session cmisSession, String cmisObjId, String actionKey){
try{
OperationContext operationContext = new OperationContextImpl();
operationContext.setIncludeAcls(true);
CmisObject obj = getResourceById(cmisSession, cmisObjId);
obj = (CmisObject)cmisSession.getObject(obj, operationContext);
Acl acl = obj.getAcl();
AllowableActions actions = obj.getAllowableActions();
Set<Action> allowedActions = actions.getAllowableActions();
for(Action act :allowedActions){
if(actionKey.equals(act.name())){
return true;
}
}
}catch (Exception e){
log.debug("Error accessing Object allowed actions | "+e.toString());
}
return false;
}
但是這種方法對於消費者/讀取角色的用戶返回假陰性。我花了一些時間才意識到Action CAN_GET_ACL
已被綁定角色cmis:all
和base.ReadPermissions
,所以消費者根本無法獲取ACL,因此我的方法將創建一個空的'allowedActions'數組。縱觀CMIS:映射我可以看到:
<cmis:mapping>
<cmis:key>canGetACL.Object</cmis:key>
<cmis:permission>cmis:all</cmis:permission>
<cmis:permission>{http://www.alfresco.org/model/system/1.0}base.ReadPermissions</cmis:permission>
</cmis:mapping>
一個顯而易見的解決辦法是讓base.ReadPermissions
對公司的所有用戶。但我不確定這是否是解決這個問題的最佳方式,也許我正在打開一些安全漏洞。這是一個很好的解決方案嗎?
或者我應該找到另一種方法來檢查權限?有什麼建議麼?
謝謝你的時間!
thanx,在這裏很多好點。然而,我並沒有使用你提出的webScripts API,而是Apache化學OpenCmis,我找不到另一種方法來獲得允許的動作 – yannicuLar
Oke,但是在Apache化學OpenCMIS中,你可以定義是否需要原子綁定, json或WebService綁定。所以我想你需要在CMIS中多挖一點。 –