DQL 또는 DFC (자바)와이 작업을 수행 할 수있는 몇 가지 방법이있다. 어떤 방법을 선택하든, 캐비닛/폴더에 액세스하려는 실제 사용자의 세션을 사용하는 것이 좋습니다. 나는 수퍼 유저 (Documentum의 보안 모델을 우회 할 수있는)를 사용하지 않을 것입니다.
어쨌든 Java로 코딩하려는 경우 가장 유연한 솔루션은 DFC 또는 DFC와 DQL의 조합을 사용하는 것입니다. IDfSysobject
(캐비닛, 폴더 또는 문서)을 받으면 getPermit()
메서드를 사용하면 int
을 사용할 수 있습니다. 이 int
을 IDfACL
인터페이스의 정적 정수와 비교하여 테스트하십시오. 매직 넘버는 피하십시오.
예를 들어 원하는 개체를 목록에 넣으십시오.
// 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의 보안 모델을 따릅니다. 사용자는 권한이없는 개체를 절대로 볼 수 없습니다.
이 작업은 .net에서 수행하는 방법입니다. select r_object_id는 DA가 동일한 사용자 로그인을 사용하는 것보다 많은 개체를 반환합니다. 적어도 내 용도는 같아야합니다. –
DA가 더 적은 캐비닛을 반환하는 이유는 DA가'dm_cabinet'의'is_private' 속성을 읽고 해석하기 때문에보기에서이 캐비닛을 숨기는 것입니다. 이 캐비닛도 숨기려면'WHERE' 절에'AND is_private = 0'을 추가하십시오. – eivamu
내 질문에 맞지 않을 것 같아요. dm_cabinet에서 기본 선택을 실행하면 사용자 별 캐비닛을 포함한 모든 캐비닛을 반환하고 다른 사용자의 캐비닛을 포함하고 싶지는 않습니다. 나는 제임스와 크리스, 리사의 개인 캐비닛을 볼 수 있습니다. 나는 라이언으로 로그인했습니다. –