Для xpage-приложения с Java-бинами мне нужно проверить, есть ли у определенного пользователя (не текущего пользователя) доступ читателя к документу. Все вышеперечисленные уровни доступа (ACL для базы данных, ACL для XPage ...) можно считать само собой разумеющимся. Текущий пользователь всегда как минимум автор.
Каждый документ имеет одно поле для чтения «читатели» и три поля автора «создатель», «авторы», «AdminAuthor», последнее можно игнорировать, поскольку оно всегда содержит «[Admin]» для каждого документа
В настоящее время идея состоит в том, чтобы получить группы пользователей, как показано здесь ( Определить все группы для определенного пользователя ), просмотреть их и сравнить с содержимым поля полей читателя и автора
Почему мне это не нравится:
- использование недокументированного API
- ужасная производительность
Есть ли лучший способ сделать это? Особенно с учетом вложенных групп, поэтому представление $ 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;
}
Спасибо за любую помощь