【发布时间】:2015-05-09 23:32:26
【问题描述】:
我正在尝试从不允许匿名 ACL 访问的不同数据库中的视图创建重复元素。
- PubDb.nsf 为用户匿名作者设置了 ACL
- PrivDb.nsf 为用户匿名设置了 ACL,默认为“无访问权限”。
数据库 PrivDb 包含我想要保护的信息,但想提取几个视图以供公开展示。
当我使用 PrivDb.nsf 视图在 PubDb.nsf 中创建重复时,它不会显示任何数据。我可以使用 sessionAsSigner 让 SSJS 在服务器端查看视图并打开文档,但是当我尝试显示视图或重复元素时没有数据?如果我将 PrivDb for Anonymous 中的 ACL 更改为 Reader,一切正常,但现在整个数据库都对匿名访问开放。
我了解 sessionAsSigner 和 sessionAsSignerWithFullAccess 允许我使用 db 签名者有效权限,并且我可以使用 SSJS 访问 notesdocuments 并使用单个文档的计算字段发布数据,但我找不到任何信息告诉我我可以或无法使用 sessionAsSigner 显示 xpages 元素(重复或查看)。也许我可以创建一个填充块的 lotusscript 代理?
下面是我用来在 PubDb.nsf 中创建重复元素的代码。请注意,我分配了 DB 两次,一次在 Application 中,一次在 View 中,因为当我没有在视图的计算值中使用 sessionAsSigner 时,我会收到身份验证提示,并且它在 app 字段中是必需的。
<xp:this.data>
<xp:dominoView var="view2">
<xp:this.databaseName><![CDATA[${javascript:
var DB:NotesDatabase=sessionAsSigner.getDatabase(database.getServer(),"PrivDb.nsf");
DB;
}]]>
</xp:this.databaseName>
<xp:this.viewName><![CDATA[${javascript:
var dbOther:NotesDatabase = sessionAsSignerWithFullAccess.getDatabase(database.getServer(), "PrivDb.nsf");
var lookupView:NotesView = dbOther.getView( "PrivView" );
lookupView.recycle();
lookupView}]]>
</xp:this.viewName>
</xp:dominoView>
</xp:this.data>
<div class="container">
<div class="page-header">
<h1>This is a test.</h1>
</div>
<xp:br></xp:br>
<xp:br></xp:br>
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-10">
<xp:repeat id="repeat1" rows="30" var="playerData"
value="#{view2}" repeatControls="true">
<div class="panel panel-default">
<xp:text escape="true" id="computedField1"
value="#{playerData.$5}">
</xp:text>
hcp:  
<xp:text escape="true" id="computedField5"
value="#{playerData.$6}">
</xp:text>
<xp:br></xp:br>
<xp:text escape="true" id="computedField2"
value="#{playerData.$7}">
</xp:text>
   
<xp:text escape="true" id="computedField3"
value="#{playerData.$8}">
</xp:text>
   
<xp:text escape="true" id="computedField4"
value="#{playerData.$9}">
</xp:text>
<xp:br></xp:br>
</div>
<div class="col-md-1"></div>
</xp:repeat>
</div>
</div>
</div>
【问题讨论】:
-
除了 Per 的回答,您还应该考虑在 PrivDb.nsf 中使用作者/读者功能。从安全角度来看,使用 sessionAsSigner 提升权限并不是最佳实践。
-
谢谢,叶戈尔。我同意最佳做法是使用标准身份验证和安全做法。在这种情况下,我们权衡了我们的选择,这似乎是最好的选择。
标签: xpages lotus-notes xpages-ssjs