documentum dql return cabinet where r_accessor_permit> 2

时间:2014-09-11 16:50:17

标签: dql documentum

大家好我编写了一个程序,该程序应该查询文档安装以返回列表 橱柜或文件夹,我有一个查询,返回文件夹中的对象就好了,但我无法返回根或家庭橱柜的可见柜子,我试图说像

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

所以基本上我想返回给定用户的dm文件柜中的对象,但只返回那个用户拥有3或更高权限的对象。有没有办法做到这一点?

有没有办法将两个表联合为acl和dm_cabinet

2 个答案:

答案 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会以您尝试获取对象的方式尊重有关对象的用户权限。

如果您无法建立此连接,则需要一些自定义编码。如果是这样的话,我会更新我的回答。