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

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

2008年11月13日木曜日

機能強化された@UserRoles関数の不思議

DBにおける自分のロールを表示する
では、@UserRoles関数の動きを説明した。
Notes 8になって、この関数が機能強化されたとのことで、試してみた・・・

が、やっぱりローカルでは動作しない。
なぜ???と、よ~くデザイナーヘルプを眺めてみると・・・
「サーバー上のデータベースまたはローカルの複製されたデータベースの場合は、現在のユーザーが持つロールのリストが返されます。ロールは、データベースのアクセス制御リスト内に定義されています。」
とある。

ん?どうやら、レプリカのDBでないと、ローカルでは動作しないようだ。
・・・ということで、早速サーバにあるDBをローカルに複製してみる。

おぉ!@UserRoles関数が動作するではないか!!

ここでちょっと考えてみた。
このDB、サーバにあるDBを削除したらどうなるんだろう?動くのかな?

はい。削除してみました。
結果・・・

サーバ上のDBを削除しても、ローカルレプリカのDBでは、@UserRoles関数は動作しました。
こうなってくると、ローカルに作成したDBとローカルレプリカのDBの違いは何だろう?

データベースのプロパティ、複製の設定を見てみたが、変わったところはない。
うーん。何でだろう???

誰か知ってたら教えて!

3 件のコメント:

わろ さんのコメント...

こんにちは。

6.5の環境しかないのでR8での設定はわかりませんが、アクセス制御リスト画面の「詳細」の中のチェックボックス「このデータベースのレプリカはすべて共通のアクセス制御リストを用いる」にチェックをつけるとACL設定がローカルDBでも有効になります。
レプリカDBではないローカルDBの場合(システム管理サーバの指定がないDB全般かも?)は個人アドレス帳を参照して権限チェックされるようです。
恐らく上記チェックがついているのではないでしょうか?

万が一質問の意図を読み違えていたらごめんなさい。

およよ さんのコメント...

わろさん、コメントありがとうございます。

@UserRoles関数はR8で機能強化されていて、ローカル環境でも動作すると言うことになったのです。
ただし、サーバDBのレプリカでないとダメだよ。ということなのです。

ここで、サーバDBのレプリカをローカルに作成した後、サーバ上のDBを削除しても、ローカルのDBで@UserRoles関数は動作するのか?という事を試してみたのです。

結果として、サーバDBのレプリカの場合、サーバ上のDBを削除した後も、ローカルDBは@UserRoles関数が有効であったと言うことで、ローカルに新規作成されたDBと何が違うのだろうか?という疑問なのです。

なので、ACLの「このデータベースのレプリカ~」のチェックは関係ありませんでした(付いていても付いていなくても結果は同じ)。

わろ さんのコメント...

こんにちは。

やはり間違っていましたね。
失礼致しました^^;