단편 소설 :이 행동을 모든 소비자에게 부여 할 생각입니다. 보안 현명하고, 어리석은가?Alfresco Consumer에 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에서 좀 더 자세히 살펴볼 필요가 있다고 생각합니다. –