XPages (Domino) 中相应的访问权限和 showing/hiding 按钮

Access rights and showing/hiding buttons accordingly in XPages (Domino)

我想在当前用户拥有作者权限时显示一个按钮,或者如果当前用户是具有这些权限的组的成员。

现在I found this approach.

这就是我尝试实现它的方式,在我按钮的 rendered 属性 中:

var cxt = com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent();
var isEditable = cxt.isDocEditable(currentDocument.getDocument());
return isEditable;

在我的例子中 isEditable 总是正确的。

有人可以告诉我我做错了什么吗?

提前谢谢你。

编辑

看来我很愚蠢地跳过了 Author 访问并仅使用 ManagerEditorReader 进行了测试。

非常感谢@Paul Stephen Withers 和@Per Henrik Lausten 带领我找到解决方案。

进一步参考,如果有人需要,这里是我如何 show/hide edit/hide 保存按钮,取决于文档的 read/write 模式:

// Save button
var showButton = currentDocument.isEditable();
var contxt = com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent();
var isEditable = contxt.isDocEditable(currentDocument.getDocument());
return (isEditable && showButton);

// Edit button
var showButton = !currentDocument.isEditable();
var contxt = com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent();
var isEditable = contxt.isDocEditable(currentDocument.getDocument());
return (isEditable && showButton);

确保您在数据库的 ACL 中使用具有作者访问权限的用户进行测试。

对于具有编辑权限的用户,您的代码将始终 return 正确。

另一种方法是 return 来自 userBean 的用户 accessLevel,如果用户具有 EDITOR 访问权限或更高权限,则呈现按钮。您还需要测试具有 AUTHOR 访问权限的用户,并进一步测试这些用户是否在文档的 AUTHORS-TYPE 字段中(下面示例中的 DocAuthor 字段)。

以下代码可用于这两种情况,并且在 呈现 属性 中用于 [编辑] 按钮:

if (document1.isEditable()){
    return false;
} else {
    var editor = userBean.accessLevel >= lotus.domino.ACL.LEVEL_EDITOR;
    var author = userBean.accessLevel >= lotus.domino.ACL.LEVEL_AUTHOR;
    var isUser = @IsMember(document1.getItemValue("DocAuthor"),userBean.canonicalName);

    if((editor) || (isUser && author)) {
        return true;
    } else {
        return false;
    }
}