XPages (Domino) 中相应的访问权限和 showing/hiding 按钮
Access rights and showing/hiding buttons accordingly in XPages (Domino)
我想在当前用户拥有作者权限时显示一个按钮,或者如果当前用户是具有这些权限的组的成员。
这就是我尝试实现它的方式,在我按钮的 rendered
属性 中:
var cxt = com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent();
var isEditable = cxt.isDocEditable(currentDocument.getDocument());
return isEditable;
在我的例子中 isEditable
总是正确的。
有人可以告诉我我做错了什么吗?
提前谢谢你。
编辑
看来我很愚蠢地跳过了 Author
访问并仅使用 Manager
、Editor
、Reader
进行了测试。
非常感谢@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;
}
}
我想在当前用户拥有作者权限时显示一个按钮,或者如果当前用户是具有这些权限的组的成员。
这就是我尝试实现它的方式,在我按钮的 rendered
属性 中:
var cxt = com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent();
var isEditable = cxt.isDocEditable(currentDocument.getDocument());
return isEditable;
在我的例子中 isEditable
总是正确的。
有人可以告诉我我做错了什么吗?
提前谢谢你。
编辑
看来我很愚蠢地跳过了 Author
访问并仅使用 Manager
、Editor
、Reader
进行了测试。
非常感谢@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;
}
}