Для xpage-приложения с java beans мне нужно проверить, есть ли у определенного пользователя (не текущего пользователя) доступ для чтения к документу. Все указанные выше уровни доступа (ACL базы данных, XPage ACL...) можно считать само собой разумеющимися. Текущий пользователь всегда является как минимум автором.
Каждый документ имеет одно поле читателя «читатели» и три поля автора «создатель», «авторы», «Администратор», последнее можно игнорировать, так как оно всегда содержит только «[Администратор]» для каждого документа.
Текущая идея состоит в том, чтобы получить группы пользователей, как показано здесь (Определить все группы для определенного пользователя), прокрутить их и сравнить с содержимым полей читателя и автора.
Почему мне это не нравится:
Есть ли лучший способ сделать это? Особенно с учетом вложенных групп, поэтому представление $ServerAccess на самом деле не вариант.
Текущий код:
public boolean isReader(String notesName, String documentID){
try {
Vector<String> readers= getAllReaderFieldsValues(documentID);
if (readers.contains(notesName)){
return true;
}
lotus.notes.addins.DominoServer server = new lotus.notes.addins.DominoServer(DominoUtils.getCurrentSession().getServerName());
for(String group:(Vector<String>)server.getNamesList(notesName)){
if (readers.contains(group)){
return true;
}
}
} catch (NotesException e) {
//ErrorHandling
}
return false;
}
Спасибо за любую помощь
Это моя проблема: как мне проверить, есть ли у определенного пользователя права чтения документа?
написав код, который это проверяет?
Я не знаю, как это сделать, поэтому и задал этот вопрос. Если вы знаете один, пожалуйста, поделитесь им со мной
Под «определенным пользователем» вы подразумеваете текущего пользователя или какого-то другого пользователя? Лучшее решение будет во многом зависеть от контекста, поэтому будет полезно предоставить немного больше подробностей о приложении, ролях доступа и деталях документа.
Как пользователь может получить доступ к документу, который он не может видеть/читать?
обновил вопрос, чтобы сделать его более точным, и добавил пример кода, надеюсь, теперь он понятнее




Существуют разные способы проверить, есть ли у пользователя доступ к документу, но все они недокументированы (но все еще пригодны для использования с десяти лет), поэтому они не будут соответствовать вашим требованиям (например, запуск в другом пользовательском контексте или специальном представлении). со столбцом "$C1$",...)
«Задокументированный» способ сделать то, что вы хотите, — просто добавить пользователя в поле чтения, если его имя еще не в списке. Нет необходимости проверять, есть ли у пользователя доступ или нет.
Меня все еще интересует ваш сценарий, потому что я не понимаю, что вы пытаетесь реализовать: вы проверяете, входит ли пользователь в определенную группу, которая дает ему доступ к документу. Если пользователь входит в одну из этих групп, вы пропускаете его имя. Тем временем пользователь удаляется из группы и больше не имеет доступа к документу...
Почему бы не работать с группами или ролями? Никакого кодирования, только администрирование. Вы решаете организационные проблемы?
сценарий следующий: если пользователю предоставлены права чтения для документа-ответа, он должен иметь возможность видеть все вышеперечисленные родительские документы. Поскольку поля чтения отображаются пользователю для информации и редактирования, я не хочу превращать его в кластер, создавая дубликаты или ненужные записи (например, пользователь уже находится глубоко где-то во вложенной группе -> не нужно добавлять его)
В понедельник пользователь находится в одной из вложенных групп, документ сохранен, пользователь явно не добавлен. Во вторник его имя удаляется из группы. В среду он больше не может получить доступ к документу... Теперь возникает вопрос: как узнать, нужен ему еще доступ или нет? (На мой взгляд, теперь у тебя херня)
И последнее, но не менее важное: вы должны снова и снова проверять документы, если права доступа все еще верны или нет (если вы используете информацию из ответных документов)
хорошие моменты, возможно, придется переосмыслить мой дизайн и необходимость/использование этой функции. Спасибо
Если я правильно понимаю, parentdocuments должны содержать все ридеры из ответов ниже. Что вы можете сделать, так это создать массив всех авторов и читателей из ответных документов и поместить его в поле читателя родительского документа (лучше всего создать массив уникальных значений). Не имеет значения, содержит ли список имена пользователей, группы или роли. Однако вам придется регулярно пересчитывать (по крайней мере, каждый раз, когда ответ меняется), чтобы убедиться, что он продолжает работать.
это не то, что можно «рассчитать». Вы предоставляете определенные права профилю пользователя и проверяете, какие опции у него должны быть.