2014-09-11 4 views
0

안녕하세요. 캐비닛이나 폴더 목록을 반환하는 문서 설치를 쿼리해야하는 프로그램을 작성하고 있습니다. 폴더에있는 개체를 반환하는 쿼리가 있습니다. 하지만 난 내가documentum dql 반환 캐비닛 r_accessor_permit> 2

select object_name from dm_cabinet where r_accessor_name = 'user' and r_accessor_permit >2 

그래서 기본적으로 내가 주어진 사용자에 대한 DM 캐비닛의 개체를 반환 할 무엇인가 말하려고 만하는 것을 사용자를 반환하고 루트 또는 홈 캐비닛의 볼 캐비닛을 반환하는 데 문제가 있어요 3 이상의 허가. 그게 할 일이 있니?

이 노조에 방법이다 ACL 및 dm_cabinet에 대한 두 개의 테이블

답변

2

DQL 또는 DFC (자바)와이 작업을 수행 할 수있는 몇 가지 방법이있다. 어떤 방법을 선택하든, 캐비닛/폴더에 액세스하려는 실제 사용자의 세션을 사용하는 것이 좋습니다. 나는 수퍼 유저 (Documentum의 보안 모델을 우회 할 수있는)를 사용하지 않을 것입니다.

어쨌든 Java로 코딩하려는 경우 가장 유연한 솔루션은 DFC 또는 DFC와 DQL의 조합을 사용하는 것입니다. IDfSysobject (캐비닛, 폴더 또는 문서)을 받으면 getPermit() 메서드를 사용하면 int을 사용할 수 있습니다. 이 intIDfACL 인터페이스의 정적 정수와 비교하여 테스트하십시오. 매직 넘버는 피하십시오.

예를 들어 원하는 개체를 목록에 넣으십시오.

// assuming you have an initialized user session (not covered here) 
IDfSession userSession; 

List<String> readableCabinetsNames = new ArrayList<String>(); 

// will only return objects that the current user can see (browse or higher) 
String dql = "SELECT r_object_id FROM dm_cabinet"; 

IDfQuery query = new DfQuery(dql); 
IDfCollection coll = query.execute(userSession, IDfQuery.DF_READ_QUERY); 
while (coll.next()) { 
    IDfCabinet cabinet = (IDfCabinet) coll.getTypedObject(); 
    if (cabinet.getPermit() >= IDfACL.DF_PERMIT_READ) { 
     String cabinetName = cabinet.getObjectName(); 
     readableCabinetsNames.add(cabinetName); 
    } 
} 

이 당신이 시작하는 내 기억에서 뭔가이며, 그것은 개선 될 수있다 - 많은 :

이 기억 : DQL 및 DFC 모두가 Documentum의 보안 모델을 따릅니다. 사용자는 권한이없는 개체를 절대로 볼 수 없습니다.

+0

이 작업은 .net에서 수행하는 방법입니다. select r_object_id는 DA가 동일한 사용자 로그인을 사용하는 것보다 많은 개체를 반환합니다. 적어도 내 용도는 같아야합니다. –

+1

DA가 더 적은 캐비닛을 반환하는 이유는 DA가'dm_cabinet'의'is_private' 속성을 읽고 해석하기 때문에보기에서이 캐비닛을 숨기는 것입니다. 이 캐비닛도 숨기려면'WHERE' 절에'AND is_private = 0'을 추가하십시오. – eivamu

+0

내 질문에 맞지 않을 것 같아요. dm_cabinet에서 기본 선택을 실행하면 사용자 별 캐비닛을 포함한 모든 캐비닛을 반환하고 다른 사용자의 캐비닛을 포함하고 싶지는 않습니다. 나는 제임스와 크리스, 리사의 개인 캐비닛을 볼 수 있습니다. 나는 라이언으로 로그인했습니다. –

2

dm_cabinet은 dm_folder의 하위 유형입니다. 그게 너를 도울 수있어. 특정 사용자 자격 증명으로 Documentum 저장소에 연결할 수있는 경우, Documetnum은 가져 오는 동안 개체에 대한 사용자 권한을 존중하므로이 사용자가 볼 수 있는지 여부에 관계없이 필터없이 개체를 가져와야합니다.

이 연결을 만들 수없는 경우 맞춤 코딩이 필요합니다. 그럴 경우 내 대답을 업데이트 할 것입니다.

+0

내가 내 질문에 맞지 않을 것 같아요. dm_cabinet에서 기본 선택을 실행하면 사용자 별 캐비닛을 포함한 모든 캐비닛을 반환하고 다른 사용자의 캐비닛은 포함하지 않으려합니다. 나는 라이언으로 로그인했지만 제임스와 크리스, 리사의 개인 캐비닛을 볼 수 있습니다. –