Как проверить, есть ли у определенного пользователя доступ для чтения к документу

Для xpage-приложения с java beans мне нужно проверить, есть ли у определенного пользователя (не текущего пользователя) доступ для чтения к документу. Все указанные выше уровни доступа (ACL базы данных, XPage ACL...) можно считать само собой разумеющимися. Текущий пользователь всегда является как минимум автором.

Каждый документ имеет одно поле читателя «читатели» и три поля автора «создатель», «авторы», «Администратор», последнее можно игнорировать, так как оно всегда содержит только «[Администратор]» для каждого документа.

Текущая идея состоит в том, чтобы получить группы пользователей, как показано здесь (Определить все группы для определенного пользователя), прокрутить их и сравнить с содержимым полей читателя и автора.

Почему мне это не нравится:

  • использование недокументированного 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;
}

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

это не то, что можно «рассчитать». Вы предоставляете определенные права профилю пользователя и проверяете, какие опции у него должны быть.

Stultuske 21.01.2019 13:23

Это моя проблема: как мне проверить, есть ли у определенного пользователя права чтения документа?

J Mers 21.01.2019 13:45

написав код, который это проверяет?

Stultuske 21.01.2019 13:53

Я не знаю, как это сделать, поэтому и задал этот вопрос. Если вы знаете один, пожалуйста, поделитесь им со мной

J Mers 21.01.2019 13:58

Под «определенным пользователем» вы подразумеваете текущего пользователя или какого-то другого пользователя? Лучшее решение будет во многом зависеть от контекста, поэтому будет полезно предоставить немного больше подробностей о приложении, ролях доступа и деталях документа.

Paul Della-Nebbia 21.01.2019 19:33

Как пользователь может получить доступ к документу, который он не может видеть/читать?

Sven Hasselbach 22.01.2019 10:09

обновил вопрос, чтобы сделать его более точным, и добавил пример кода, надеюсь, теперь он понятнее

J Mers 22.01.2019 10:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
226
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

сценарий следующий: если пользователю предоставлены права чтения для документа-ответа, он должен иметь возможность видеть все вышеперечисленные родительские документы. Поскольку поля чтения отображаются пользователю для информации и редактирования, я не хочу превращать его в кластер, создавая дубликаты или ненужные записи (например, пользователь уже находится глубоко где-то во вложенной группе -> не нужно добавлять его)

J Mers 22.01.2019 11:22

В понедельник пользователь находится в одной из вложенных групп, документ сохранен, пользователь явно не добавлен. Во вторник его имя удаляется из группы. В среду он больше не может получить доступ к документу... Теперь возникает вопрос: как узнать, нужен ему еще доступ или нет? (На мой взгляд, теперь у тебя херня)

Sven Hasselbach 22.01.2019 11:30

И последнее, но не менее важное: вы должны снова и снова проверять документы, если права доступа все еще верны или нет (если вы используете информацию из ответных документов)

Sven Hasselbach 22.01.2019 11:45

хорошие моменты, возможно, придется переосмыслить мой дизайн и необходимость/использование этой функции. Спасибо

J Mers 22.01.2019 11:58

Если я правильно понимаю, parentdocuments должны содержать все ридеры из ответов ниже. Что вы можете сделать, так это создать массив всех авторов и читателей из ответных документов и поместить его в поле читателя родительского документа (лучше всего создать массив уникальных значений). Не имеет значения, содержит ли список имена пользователей, группы или роли. Однако вам придется регулярно пересчитывать (по крайней мере, каждый раз, когда ответ меняется), чтобы убедиться, что он продолжает работать.

Tom Van Aken 21.02.2019 17:09

Другие вопросы по теме