2013-12-09 4 views
0

나는 주어진 프레스코 자원에, 사용자의 허용 작업을 얻을 수있는 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:allbase.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 수 있도록하는 것입니다. 하지만 이것이 그 문제를 해결하는 가장 좋은 방법인지 확신 할 수는 없지만 보안상의 허점을 여는 중일 수 있습니다. 그게 좋은 해결책일까요?

아니면 권한을 확인하는 다른 방법을 찾아야합니까? 어떤 제안?

감사합니다.

답변

1

이게 무슨 뜻인지는 모르겠지만 왜 객체의 ACLS가 필요한가요?

동작을 활성화/비활성화하려는 경우 허용 가능한 동작을 얻을 수 있으면 충분합니다. 사용자/그룹 x가 개체에 대한 사용 권한을 갖고 있는지 확인하려는 이유가 무엇입니까?

Allowable Actions CMIS API의 가능한 결과를 보면 알 필요가있는 전부입니다. 또한 operationContext true로 include Actions)에서 설정

그런 다음 권한과 크로스 체크를 확인하기 위해 관리자 계정을 사용/비활성화 작업을 가능하게 이외의 물건을 수행 할 객체에 대한 권한과 무엇을 알고 싶은 경우 그것은 현재 사용자와 함께.

둘째 : 권한 부여를 위해 해를 끼칠 수는 없지만 업그레이드와 관련하여 장기간에는 기본 권한을 변경하지 않을 것입니다. 그러면이 권한이있는 사용자 지정 권한 그룹을 만들고 최상위 수준의 모든 그룹에 적용합니다.

+0

thanx, 좋은 점은 많이 있습니다. 그러나 당신이 제안하는 webScripts API를 사용하지는 않지만 Apache 화학 OpenCmis를 사용하고 허용 된 동작을 얻는 또 다른 방법을 찾을 수 없었습니다. – yannicuLar

+0

Oke, Apache 화학 OpenCMIS에서 원자 바인딩을 원한다면 정의 할 수 있습니다. json 또는 WebService 바인딩. 그래서 저는 CMIS에서 좀 더 자세히 살펴볼 필요가 있다고 생각합니다. –