応用例 複数項目の組み合わせパターンに応じたデータの閲覧制御
最終更新日: 2020年3月14日
R8 | R9
サンプルの仕様
あるモデルの複数項目の「組み合わせ」によって、アクセスレベルを算定できるものとします。 このとき、当該アクセスレベルをもった利用者のみ、データの閲覧を行わせたいという要件を実現してみます。
例を示します。ある工場からの出荷製品について、次のような条件で判定処理を行うものとします。
また、上記 1 〜 3 に対して、次のようなアクセスレベル表を用意するものとします。
アクセスレベル | 条件 | 説明 | 処理 |
---|---|---|---|
レベル4 | (1) かつ (2) かつ (3) | 全世界へ公開 | 該当製品を公開する |
レベル3 | (1) かつ (2) | アジア地域へ公開 | |
レベル2 | (3) | 国内へ公開 | |
レベル1 | 社内限定 |
例
始めにシステム管理者(admin)でログオンし、テストユーザを登録します。 ここではレベル1からレベル4のプリンシパルをもったアカウントをそれぞれ作成しました。

level1アカウントのプリンシパルには「一般ユーザ」と「レベル1」を付与します。同様に level2 アカウントには「レベル2」を、level3 アカウントには「レベル3」を、level4 アカウントには「レベル4」をそれぞれ付与します。

続いて製品(テストモデル)を作成します。各項目を入力すると、アクセスレベルの値は自動計算されます。

アクセスレベル毎のテストモデルを用意します。

アクセスレベル1をもったアカウントでログオンします。アクセスレベル1のデータのみが閲覧できます。

アクセスレベル2をもったアカウントでログオンします。 アクセスレベル1およびレベル2データが閲覧できます。

アクセスレベル3をもったアカウントでログオンします。 アクセスレベル1、レベル2、レベル3のデータが閲覧できます。

アクセスレベル4をもったアカウントでログオンします。 すべてのアクセスレベルのデータが閲覧できます。

定義方法
サンプルで用意したモデルは次の通りです。

本サンプルで利用する項目を示します。

「アクセスレベル」を整数型として用意します。次の計算式によって求められるとします。
IF(
AND(
${gaihihantei#id}==2,
${gaihihanteikekka#id}==2,
${status#id}==3,
${seihinsyubetsu#id}==1
),
4,
IF(
AND(
${gaihihantei#id}==2,
${gaihihanteikekka#id}==2,
${status#id}==3
),
3,
IF(
${seihinsyubetsu#id}==1,
2,
1
)
)
)

さらにアクセスレベル項目について、複数の暗黙条件を設定します。
暗黙条件の設定では「指定した権限を満たした場合、この暗黙条件を適用しない(無視する)」というオプションが用意されています。この機能を活用します。

複数の暗黙条件が指定された場合
複数の暗黙条件が指定された場合、これらの暗黙条件は「かつ」条件式として扱われます。 ここで示した例の場合、下記の条件が適用されることになります。
これに「適用外の権限」を考慮すると次のようになります。
access1 権限を持つユーザの場合
暗黙条件は以下のように動作します。
ただし「2より小さい」という条件は「3より小さい」と「4より小さい」を包含しているので、結果的には「アクセスレベル」項目は「2より小さい」という条件が適用されることになります。
access1, access2 権限を持つユーザの場合
暗黙条件は以下のように動作します。
ただし「3より小さい」という条件は「4より小さい」を包含しているので、結果的には「アクセスレベル」項目は「3より小さい」という条件が適用されることになります。
権限の設定
権限を用意します。利用者毎に割り当てる「プリンシパル」と、各プリンシパルに対応した「パーミッション」を用意します。
