Доступ для пользователей, добавленных в группы через Java-код, вычислен неправильно - PullRequest
1 голос
/ 29 марта 2019

При редактировании членов группы через Java, запускаемых с Xpage, изменения игнорируются при доступе к базе данных до тех пор, пока группа не будет сохранена вручную в Domino Directory. Группа находится в ассистентском направлении

Для xpage-приложения я хочу, чтобы poweruser мог изменять группы через xpage:

При сохранении xpages получает соответствующий документ из БД каталога domino, записывает список членов в элемент «Members» и сохраняет документ (см. Код ниже).

Группа используется для предоставления авторского доступа к БД. При попытке доступа к БД с вновь добавленным пользователем доступ запрещен, пока я не открою документ группы вручную через Notes-Client, переключусь в режим редактирования и сохраню его (без изменения каких-либо данных). То же самое при использовании только что удаленного пользователя, он все равно получит доступ. После сохранения группы вручную все работает сразу.

Попробовал его с новыми группами (создал документ, установил все элементы и сохранил его) и всеми существующими (получил существующую, рабочую группу и изменил ее), без разницы

//Group is a very basic bean that holds the data changed by the user on the
//xpage. no logic, just getters/setters

public void save(Group group) {
            if (group.getID().equals("")) {
//new Group
                doc = pnab.createDocument();
                doc.replaceItemValue("Form", "Group");
                doc.replaceItemValue("Type", "Group");
                doc.replaceItemValue("Grouptype", "2");
                doc.replaceItemValue("Grouptitle", "2");
                doc.replaceItemValue("ListCategory", con.getName());
                doc.replaceItemValue("$ConflictAction", "1");
                doc.replaceItemValue("$Group_Main", "0");
                doc.replaceItemValue("DocumentAccess", "[Groupmodifier]");
                doc.getFirstItem("DocumentAccess").setAuthors(true);
                replaceValues(group, doc);
                doc.save();
                group.setID(doc.getUniversalID());
            } else {
//existing group
                doc = pnab.getDocumentByUNID(group.getID());
                replaceValues(group, doc);
                doc.save();
            }
    }
private void replaceValues(Group group, Document doc) throws NotesException {
        doc.replaceItemValue("comment", group.getComment());
        doc.replaceItemValue("ListName", group.getNotesName());
        Vector<String> members=new Vector<String>(group.getMembers());
        Collections.sort(members, new StringComparator(true)); // sorts the memberlist alphabetical, ignores case
        doc.replaceItemValue("Members", members);
    }

Я предполагаю, что должны быть сделаны некоторые обновления / очищены кэши и т. Д. Любой совет, что делать / где искать?

Уже исследовал групповую форму из Dominodirectoy-шаблона, ничего особенного там нет. Также проверил Notes-GroupManager LS-Libary с openNTF.org, тоже ничего особенного. Это может быть специфическая проблема Java

Ответы [ 2 ]

4 голосов
/ 29 марта 2019

Для работы обновленных групп необходимо обновить несколько представлений в Domino Directory (names.nsf). Обновление следующих представлений должно помочь (при условии, что namesDb является экземпляром names.nsf на сервере):

namesDb.getView("($LDAPCN)").refresh();
namesDb.getView("($Users)").refresh();
namesDb.getView("($ServerAccess)").refresh();
namesDb.getView("($VIMPeople)").refresh();
2 голосов
/ 29 марта 2019

Добавить свойство Имена к элементу вашего члена:

Item itemMembers = doc.replaceItemValue("Members", members);
itemMembers.setNames(true);

Преобразует записи членов в допустимые значения Имен, которые могут обрабатываться Domino для прав доступа.

...