在开发 xPages 应用程序时,从传统 Notes 客户端保护 nsf 的最佳实践是什么。我想阻止通过 Notes 客户端对数据库的任何访问,同时对 xPage 没有影响。
出于多种原因,我想限制访问。文档和视图的安全性,防止用户在笔记中使用应用程序并强制他们使用 xPages。看起来没有灵丹妙药可以做到这一点,但我需要使用许多不同的解决方案。
在开发 xPages 应用程序时,从传统 Notes 客户端保护 nsf 的最佳实践是什么。我想阻止通过 Notes 客户端对数据库的任何访问,同时对 xPage 没有影响。
出于多种原因,我想限制访问。文档和视图的安全性,防止用户在笔记中使用应用程序并强制他们使用 xPages。看起来没有灵丹妙药可以做到这一点,但我需要使用许多不同的解决方案。
You can't prevent it by ACL. You can redirect common users to open your application in browser, tho. In our applications, to prevent opening them in client and XPiNC, I have made simple subform with queryOpen script:
Dim ws as New NotesUIWorkspace
ws.URLOpen Source.Document.HttpUrl
Continue = False
This subform is put inside forms that user can get doclinks to or open from view. At view level you can adopt similar approach for all visible views and/or OpenDatabase script.
This works very well with this tweak: native Domino links and XPages
我会考虑在这方面更简单,只需更改客户端的启动属性以重定向到指示用户应通过浏览器访问应用程序的页面,并提供访问系统的 URL。这不是一个完美的解决方案,这取决于信息在该系统中的传播方式,但如果用户只是通过 notes 客户端打开应用程序,这将提供一个很好的重定向以及重新培训最终用户如何应用程序将来使用。
为什么要阻止访问?
我假设管理员和服务器应该能够访问 nsf. 所以 LocalDomainAdmins、LocalDomainServers 等应该是 ACL 的一部分。
您可以通过确保 ACL 中的用户访问组包含没有匹配的 Notes 名称(Notes id)的用户帐户的名称(names.nsf 中的个人文档)来限制用户从 Notes 客户端访问 nsf 本身。然后,用户只能从 Web 而不是从 Notes 访问应用程序。
但是,如果用户已经拥有 Notes 访问权限,这可能不是一个可行的解决方案。因为您必须使用与现有个人文档不匹配的用户名创建新的个人文档,这意味着现有用户将拥有一个用于 Notes 访问的个人文档和一个用于 Web 访问的个人文档。
相反,您也许应该考虑限制对文档的访问(使用 Readers 字段)和视图(通过限制对某个角色的访问)。
将应用程序拆分为两个 .nsfs。一种用于数据,另一种仅用于 xpage 设计。锁定数据 .nsf 并将其限制为仅允许设计签名者访问。这会引起一些麻烦,因为您需要使用 sessionAsSigner 来提取数据。
在数据库中创建一个名为“Admin”的新角色
如果用户没有管理员角色,则将代码放入将使用 uidatabase.close 的数据库脚本后打开事件
对于没有管理员角色的所有用户,将脚本放在 alla 视图中的“查询打开”事件中, continue = false。(这将阻止用户使用 go to view 菜单操作从工作区打开视图)
仅将 acl 中的“管理员”角色分配给应该能够从 Notes 客户端访问它的人员
您还可以为除“管理员”角色之外的所有人“隐藏”Notes 中的所有视图,但这可能会导致其他问题,具体取决于应用程序的设计方式。
通过从表单中删除字段或隐藏所有字段,您可以使尝试访问 Notes 中的数据变得难以接受。然后,您可以对 Notes 客户端隐藏视图并使访问文档变得更加困难(尽管仍然有人可以创建私有视图)。
在我们的一个数据库中,数据库打开到 XPiNC 中的 XPage,它显示了一个仅供管理员打开视图的链接。
var server:NotesName = session.createName(@Subset ( @DbName(), 1));
var filepath = database.getFilePath();
return "Notes://" + server.getCommon() + "/" + filepath + "/ViewToOpen?OpenView";
虽然它不会阻止最终用户在所有情况下访问 Notes 客户端版本(仍然有人可以发送 doclink 或查看链接),但它允许用户按照他们的正常双击模式并以我想要的方式打开数据库看见了。通过该链接,我可以允许那些真正需要 Notes 客户端访问它的人。