ACL の設定で文書を作成する権限がないのに[新規作成]ボタンが表示されるのはおかしいとエンドユーザやお客様から指摘されたことはありませんか? こんな時に利用できるのが @UserAccess という関数です。今回はこの関数の動作についてまとめます。
機能と構文
@UserAccess は、引数で指定したデータベースに対して、現在のユーザのアクセスレベルを含む、アクセス情報を詳細に確認することができます。構文は次の通りです。
@UserAccess( server :file ; [ accessPrivilege ] ) |
引数は次の通りです。
1 | server | 文字列 | サーバ名 |
file | 文字列 | データベースのファイルパス |
|
2 | accessPrivilege | キーワード | 省略可能 特定のアクセス情報を指定して取得する場合に利用 |
最初の引数は、サーバ名とファイル名をリストで指定するタイプで、@DbLookup など他の関数と同様です。通常は、自分自身の DB を調査することになるので @DbName を指定することになりますね。
戻り値(キーワードなし)
まずは、キーワードを省略した場合の戻り値の確認です。
@UserAccess(@DbName) |
この式をフィールド(複数値可)のデフォルト式にセットします。作成者ユーザでテストした結果は次のようになります。
最初がアクセスレベルで、0(なし)~ 6(管理者)を表します。それ以降は各オプションの設定(1 でチェック)となります。非常にわかりやすいのですが、いくつか注意点があります。
1つ目は、戻り値は文字列リストである(数字だが ”数値” ではない)ことです。この結果を使った非表示式を記述するときなどでは、混乱しがちとなりますので注意してください。
2つ目は、オプションに『文書を複製またはコピー』が含まれない点です。このオプションは、@UserAccess がリリースされて以降に追加されました。既存のアプリに影響が出ないよう配慮されているからです。その代わりとして、省略可能な引数 accessPrivilege が追加され、そのオプションを取得できるように拡張されています。
互換性を保ちつつ、機能追加も行われた結果ということですね。
引数 accessPrivilege の使い方
この引数を使うと特定の権限だけの結果を得ることができます。例えば、先の『文書を複製またはコピー』の設定を取得するのであれば、次のように指定します。『文書を複製またはコピー』にチェックがあれば ”1”、なければ ”0” を返します。
@UserAccess(@DbName; [REPLICATEORCOPYDOCUMENTS]) |
指定できるキーワードは、次の通りです。
[ACCESSLEVEL] | アクセスレベル |
[CREATEDOCUMENTS] | 文書の作成 |
[DELETEDOCUMENTS] | 文書の削除 |
[CREATEPERSONALAGENTS] | 個人エージェントの作成 |
[CREATEPERSONALFOLDERSANDVIEWS] | 個人フォルダ/ビューの作成 |
[CREATELOTUSSCRIPTJAVAAGENTS] | LotusScript/Javaエージェントの作成 |
[CREATESHAREDFOLDERSANDVIEWS] | 共有フォルダ/ビューの作成 |
[READPUBLICDOCUMENTS] | パブリック文書[読者] |
[WRITEPUBLICDOCUMENTS] | パブリック文書[作成者] |
[REPLICATEORCOPYDOCUMENTS] | 文書を複製またはコピー |
また、キーワードは :(コロン)を使って複数指定でき、戻り値はその要素だけを含んだリスト値となります。
まとめ
今回は @UserAccess 関数を紹介しました。これを利用すれば、ACL で設定したアクセスレベルやオプションを判定できます。例えば、この記事の最初に記載した『文書を作成する権限がないユーザには[新規作成]ボタンを表示しない』式は次の通りとなります。
!( @UserAccess(@DbName; [CreateDocuments])="1" ) |
ここまで詳細な非表示の制御は、個人的には費用対効果が低いと考えており、設定していません。ただ、「できない」と「できるけどしない」は大きな違いだと思います。
0 件のコメント:
コメントを投稿