2025/09/08

アクセスレベル(ACL)の取得 - @UserAccess

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 件のコメント:

コメントを投稿