Как проверить, есть ли у определенного пользователя доступ к документу для чтения - PullRequest
0 голосов
/ 21 января 2019

Для 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;
}

Спасибо за любую помощь

1 Ответ

0 голосов
/ 22 января 2019

Существуют различные способы проверить, есть ли у пользователя доступ к документу, но все они недокументированы (но все еще могут использоваться с десятилетия), поэтому они не будут соответствовать вашим требованиям (т. Е. Работать в другом пользовательском контексте или специальный вид с колонкой "$ C1 $", ...)

«Документированный» способ сделать то, что вы хотите, это просто добавить пользователя в поле читателя, если его имени еще нет в списке. Нет необходимости проверять, есть ли у пользователя доступ или нет.

Мне все еще интересен ваш сценарий, потому что я не понимаю, что вы пытаетесь понять: вы проверяете, входит ли пользователь в определенную группу, которая дает ему доступ к документу. Если пользователь входит в одну из этих групп, вы пропускаете его имя. Тем временем пользователь удален из группы и больше не имеет доступа к документу ...

Почему бы не работать с группами или ролями? Нет кодирования, только администрация. Вы решаете организационные проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...