Есть несколько способов сделать это, либо с 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. Пользователь никогда не увидит объект, для которого у него нет прав.
Есть ли способ сделать это в .net ... select r_object_id вернет больше объектов, чем показания DA с тем же именем пользователя, по крайней мере, на моем конце. –
Причина, по которой DA возвращает меньше шкафов, заключается в том, что DA считывает и интерпретирует атрибут 'is_private' из' dm_cabinet', и поэтому он скрывает эти шкафы от представления. Если вы также хотите скрыть эти шкафы, добавьте 'AND is_private = 0' в ваше предложение WHERE. – eivamu
Я предполагаю, что мой вопрос был неправильным, когда я запускаю базовый выбор из dm_cabinet, он возвращает все шкафы, включая пользовательские, я не хочу включать шкафы других пользователей. Я могу видеть персональные кабинеты Джеймса и Криса и Лизы, хотя я вошел в систему как ryan –