对于带有Java Bean的xpage应用程序,我需要检查某个用户(不是当前用户)是否对文档具有读者访问权限。上面的所有访问级别(数据库ACL,XPage ACL ...)都可以视为理所当然。当前用户始终至少是作者。
每个文档都有一个readerfields“读者”和三个authorfields“ creator”,“ authors”,“ AdminAuthor”,最后一个可以忽略,因为每个文档始终只包含“ [Admin]”
当前的想法是获得此处显示的用户组(Determine all groups for a defined user),循环浏览并与“读者”和“作者”字段的字段内容进行比较
为什么我不喜欢它:
还有更好的方法吗?特别是考虑到嵌套组,因此$ 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;
}
感谢您的帮助
答案 0 :(得分:1)
有多种方法来检查用户是否有权访问文档,但是所有这些方法都没有文档记录(但十年以来仍然可用),因此它们不符合您的要求(即在不同的用户上下文中运行或带有“ $ C1 $”列的特殊视图,...)
一种“有据可查”的方式来做您想要的事情,就是将用户添加到阅读器字段中,如果该用户名尚未在列表中。无需检查用户是否具有访问权限。
我仍然想知道您的情况,因为我不理解您要实现的目标:您正在检查用户是否在特定的组中,该组可以授予他访问文档的权限。如果用户属于这些组之一,则跳过其名称。 同时,该用户已从该组中删除,并且无法再访问该文档...
为什么不使用组或角色?没有编码,只有管理。您是否正在解决组织问题?