通过 Java 添加到组的用户的访问权限未正确计算代码
Access for Users added to Groups via Java Code not correctly computed
当通过从 Xpage 触发的 Java 编辑组成员时,计算数据库访问时将忽略更改,直到组被手动保存在 Domino 目录中。该组位于帮助目录
对于 xpage 应用程序,我希望高级用户能够通过 xpage 修改组:
安全后,xpages 从 domino 目录 DB 中获取相应的文档,将成员列表写入 "Members"-item 并保存文档(参见下面的代码)。
该组用于授予作者对数据库的访问权限。当尝试使用新添加的用户访问 Db 时,访问被拒绝,直到我通过 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);
}
我假设需要一些更新 made/caches 清除等等。有什么建议可以 do/where 看吗?
已经从 Dominodirectoy-template 研究了 groups-form,没有什么特别的。
还从 openNTF.org 检查了 NotesGroupManager LS-Libary,也没什么特别的。可能是 java 特定问题
为了使更新后的组正常工作,您需要更新 Domino 目录 (names.nsf) 中的一些视图。刷新以下视图应该有所帮助(假设 namesDb
是服务器上 names.nsf 的一个实例):
namesDb.getView("($LDAPCN)").refresh();
namesDb.getView("($Users)").refresh();
namesDb.getView("($ServerAccess)").refresh();
namesDb.getView("($VIMPeople)").refresh();
将 属性 Names 添加到您的会员项目:
Item itemMembers = doc.replaceItemValue("Members", members);
itemMembers.setNames(true);
它将成员的条目转换为 Domino 可以处理的有效名称值以获得访问权限。
当通过从 Xpage 触发的 Java 编辑组成员时,计算数据库访问时将忽略更改,直到组被手动保存在 Domino 目录中。该组位于帮助目录
对于 xpage 应用程序,我希望高级用户能够通过 xpage 修改组:
安全后,xpages 从 domino 目录 DB 中获取相应的文档,将成员列表写入 "Members"-item 并保存文档(参见下面的代码)。
该组用于授予作者对数据库的访问权限。当尝试使用新添加的用户访问 Db 时,访问被拒绝,直到我通过 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);
}
我假设需要一些更新 made/caches 清除等等。有什么建议可以 do/where 看吗?
已经从 Dominodirectoy-template 研究了 groups-form,没有什么特别的。 还从 openNTF.org 检查了 NotesGroupManager LS-Libary,也没什么特别的。可能是 java 特定问题
为了使更新后的组正常工作,您需要更新 Domino 目录 (names.nsf) 中的一些视图。刷新以下视图应该有所帮助(假设 namesDb
是服务器上 names.nsf 的一个实例):
namesDb.getView("($LDAPCN)").refresh();
namesDb.getView("($Users)").refresh();
namesDb.getView("($ServerAccess)").refresh();
namesDb.getView("($VIMPeople)").refresh();
将 属性 Names 添加到您的会员项目:
Item itemMembers = doc.replaceItemValue("Members", members);
itemMembers.setNames(true);
它将成员的条目转换为 Domino 可以处理的有效名称值以获得访问权限。