当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2012年8月15日水曜日

XPagesでロールの制御を行う

今週は、みなさんお盆休みの方が多いようですね。筆者にとっても、今日(8/15)は、実父の誕生日ということで、ちょっといつもとは違う日なのでした。
でも、今年は(も?)、お仕事です。どうしたものでしょうか・・・

閑話休題。
しばらく書いていなかったので、今日はもうちょっと書きます。
なんか、夏休みの宿題をやっている気分です・・・

と、ちょっと懺悔気味の筆者を励ますつもりで、ボタンをクリックしてやってください。
にほんブログ村 IT技術ブログへ



では、本題へ・・・

セッションスコープ変数はどこで使われているのか? の中でも、触れていますが、XPages ではロールの取り扱い方が通常のノーツアプリケーションとは少々異なります。

通常のノーツアプリケーションの場合、@UserRoles関数で、ログインユーザーが付与されているロールを計算しますが、XPagesには@UserRoles()関数がありません。
ということで、
context.getUser().getRoles();
という式を設定して取得するのですが、これでは何が何だかさっぱり分かりません。
一つずつ解説していきましょう。


とは言え、この解説だけでは面白くないので、まずは、ノーツアプリケーションに設定されているロールの一覧を表示するというところから見てみましょう。

これは、JavaScriptのNotesDatabaseクラスとNotesACLクラスを利用します。
実際には下表のように記述します。
var acl = database.getACL();
acl.getRoles()
1行目でaclという変数に、databaseクラスのgetACL()プロパティの結果を代入します。
これでNotesACLクラスのオブジェクトが作成されます。
次に2行目のgetRoles()プロパティでノーツアプリケーションのACLに設定されているすべてのロールを取得します。
これを計算結果フィールドコントロールの「値」に埋め込めば、画面に表示させることが出来ます。


次に、context.getUser().getRoles();を分解してみていきましょう。
contextとは、XSPContextのことで、サーバースクリプトを実行しているコンテキストを表します。
従来のWebアプリケーションにおけるNotesSession.DocumentContextのイメージに近いでしょうか。
contextは自動的に定義されているようで、そのまま利用できます。

context.getUser()は、現在ログインしているユーザーについての様々な情報を取得します。
@関数でいうと、@UserNameList関数に近いでしょうか。

そして、そのユーザー情報の中から、ロールだけ取得してくるということで、getRoles()を使用します。
これが、@UserRoles関数に相当するものですね。

ということで、上記をそれぞれ計算結果フィールドコントロールに設定したものをWebで表示したものが下図です。
context変数から取得したユーザー情報
念のため、このアプリケーションのACLの画面を貼り付けておきます。
テストDBのACL画面

後は、調査したいロールがその一覧に含まれているのかを検索するのですが、
画面上のロールの一覧を見れば分かるように、複数のロールが設定してある場合、","で区切られて表示されます。
ということで、文字列検索を行う@Contains()関数を使います。
@Contains("検索対象のロール名一覧", "検索したいロール名")
という感じで入力します。
この関数の戻り値は、検索したい文字列が見つかればtrue、見つからなければfalseを返すので、
if( @Contains(r1, r2) == @True() )
として、@Trueと同じかどうかで判断しています。


どうでしょう?前回はさらっと流していて、丸ごとコピーするしかなかった状態だったかと思いますが、これで少しはスッキリしたでしょうか?

context.getUser()は、他にも色々な情報が取得できます。
デザイナーでのヘルプを見ると分かるので、是非参考にしてください。

ちなみに・・・
XPages のヘルプを見るには、
Lotus Domino Designerを起動した状態で、[ヘルプ][ヘルプ目次]メニューを実行します。
すると、専用のヘルプ画面が表示されます(ノーツアプリケーションにはなっていないので注意!)。
デザイナのヘルプ





【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: