【问题标题】:xpage button to run agent to save documentxpage 按钮运行代理以保存文档
【发布时间】:2014-12-04 09:53:51
【问题描述】:

在 xpage Web 应用程序上,用户只有公共文档的读取权限。 我想找到一种让用户能够保存到表单的方法。 我想最安全的方法是通过代理进行此操作,因为我在某些地方读到,授予对公共文档的写访问权限并不安全。

假设我有 2 个字段: firstname 和 lastname 。 我是否将它们绑定到范围变量以在代理中访问它们还是有更好的方法?

如何在单击按钮时运行代理?以下是正确的吗? var agent:NotesAgent = database.getAgent("(register)");

如何授予代理保存文档的必要权限? 我如何在我的代理中获取我的数据?例如 sessionScope.firstName 还是有更好的方法?

【问题讨论】:

  • 代理无权访问 XPages 运行时环境,因此无权访问作用域变量。作用域变量存在于在 HTTP 中运行的 XPages JVM 中。 Amgr 甚至与 HTTP 完全分离。从 8.5.1 开始(我认为)您可以将未保存的文档传递给代理,但还有其他方法可以保存公共文档。

标签: xpages xpages-ssjs agent


【解决方案1】:

最终最聪明的方法:将数据完全存储到另一个数据库中。 XPages 允许您写入不同的数据库。如果该名称不应该对其他公共用户可见,则使用存款人作为访问级别

【讨论】:

    【解决方案2】:

    不要使用代理来保存文档。请改用sessionAsSigner

    sessionAsSigner 允许在 XPage 签名者的许可下运行代码,而不是当前用户访问 XPage。

    例子:

    var db:NotesDatabase = sessionAsSigner.getCurrentDatabase();
    var doc:NotesDocument = db.createDocument();
    ...
    doc.save();
    

    【讨论】:

    • 您还可以将表单定义为公共访问和 XPage。请参阅 Mastering XPages 2nd Edition pp 1065-66
    • 加一行doc.replaceItemValue("Form", "yourFormName");
    • 克努特赫尔曼,谢谢,它似乎是这样工作的。我唯一的问题:那样安全吗?
    • 是的,当然。您作为设计师决定谁可以做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多