carlo
carlo

Reputation: 397

Xpages - Creating Repeat or View from different database with ACL set to No Access

I am trying to create a repeat element from a view in a different database that does not allow Anonymous ACL access.

The database, PrivDb has information that I want to secure, but would like to pull a couple of views out for public display.

When I create a repeat in PubDb.nsf using PrivDb.nsf view, It will not display any data. I am able to use sessionAsSigner to get SSJS to see the view and open documents at the server side level, but when I try to display the view or repeat elements there is no data ? If I change ACL in PrivDb for Anonymous to Reader everything works, but now the entire db is open to Anonymous access.

I understand that sessionAsSigner and sessionAsSignerWithFullAccess allows me to use db signers effective rights, and I can use SSJS to access the notesdocuments and publish data using computed fields for individual docs, but I can't find any information that tells me I can or can't display an xpages element (repeat or view) using the sessionAsSigner. Maybe I can create a lotusscript agent that populates the block?

Below is the code I use to create the repeat element in PubDb.nsf. Note, I assigned the DB twice, once in Application and again in View because when I didn't use sessionAsSigner in the view's computed value I would get prompted for authentication, and it's required in the app field.

<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>

Upvotes: 0

Views: 771

Answers (1)

Per Henrik Lausten
Per Henrik Lausten

Reputation: 21709

Try changing your repeat to return for instance the view entries directly using sessionAsSigner instead of going through a view data source. So in your case:

<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>

Upvotes: 5

Related Questions