大家好我编写了一个程序,该程序应该查询文档安装以返回列表 橱柜或文件夹,我有一个查询,返回文件夹中的对象就好了,但我无法返回根或家庭橱柜的可见柜子,我试图说像
select object_name from dm_cabinet where r_accessor_name = 'user' and r_accessor_permit >2
所以基本上我想返回给定用户的dm文件柜中的对象,但只返回那个用户拥有3或更高权限的对象。有没有办法做到这一点?
有没有办法将两个表联合为acl和dm_cabinet
答案 0 :(得分:2)
有几种方法可以使用DQL或DFC(Java)。无论您选择哪种方法,我都建议使用属于您尝试访问机柜/文件夹的实际用户的会话。我不会使用超级用户(这可能绕过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安全模型。用户永远不会看到他们没有权利的对象。
答案 1 :(得分:2)
dm_cabinet是dm_folder的子类型。那可以帮到你。 如果您可以使用该特定用户凭据连接到Documentum存储库,则只需要获取没有任何过滤器的对象,无论此用户是否可以看到它,因为Documetnum会以您尝试获取对象的方式尊重有关对象的用户权限。
如果您无法建立此连接,则需要一些自定义编码。如果是这样的话,我会更新我的回答。