【问题标题】:Xpages - Creating Repeat or View from different database with ACL set to No AccessXpages - 从不同的数据库创建重复或视图,ACL 设置为无访问权限
【发布时间】: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: &#160;
                    <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>
                    &#160; &#160;
                    <xp:text escape="true" id="computedField3"
                        value="#{playerData.$8}">
                    </xp:text>
                    &#160; &#160;
                    <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


【解决方案1】:

尝试更改您的重复,例如直接使用 sessionAsSigner 返回视图条目,而不是通过视图数据源。所以在你的情况下:

<xp:repeat id="repeat1" rows="30" var="playerData">
    <xp:this.value><![CDATA[#{javascript:
        sessionAsSigner.getDatabase(database.getServer(), "PrivDb.nsf").getView("PrivView").getAllEntries();
    }]]></xp:this.value>
...
</xp:repeat>

【讨论】:

  • 您好,感谢您的回复。它有点工作。我能够让行进行迭代并使用显示 doc 的 unids,但否则我会收到一个错误:从 lotus.domino.local.ViewEntry 类型的 bean 获取属性 '$5' 时出错。无论 ACL 设置如何,都会发生这种情况。我试过: playerData.getDocument().getItemValueString("createdBy") 和其他一些,但似乎无法显示数据。会继续努力。
  • 谢谢 Per,我使用下面的行来访问列数据: ... . 现在,当我向前翻页时,寻呼机控件给了我一个除以零的运行时错误,但我快到了。
  • 完成,从重复选项中删除了“在页面创建时创建控件”,它的工作就像一个魅力。感谢您的帮助!
  • 很高兴听到。我更新了我的答案,不包括 repeatControls="true"。记得接受答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2013-08-18
相关资源
最近更新 更多