各種パターンでビューをフィルタリング
ビューのフィルタリングを検証するために、以下のようなテーブルを準備します。
・「課題管理用」として記録テーブルを作成
・エディタ、一覧項目に「状況」「分類A」「担当者」を準備(その他「内容」等任意)
・「状況」に「未着手(100)」「実施中(200)」「完了(900)」「保留(910)」を準備
・「分類A」に「開発」「設定」を準備
・グループの管理で「管理者グループ(グループID:1)」を準備
作成したテーブルを利用し、簡単なものから少し複雑なものまで3つのフィルタリングを設定してみます。
実際に試す際には、サーバスクリプトに<スクリプト>の内容を入力し、条件は必ず「ビュー処理時」を選択してください。
【パターン1】担当者に担当の課題だけを見せたいとき
「担当者」にセットされた「ユーザ」のユーザIDがログインユーザIDと一致するようフィルタリングする。
<スクリプト>
view.Filters.Owner = context.UserId;
[view.Filters.Owner] ・・・「担当者」のフィルタリング設定
[context.UserId] ・・・ログインユーザのユーザID
【パターン2】管理者グループに属するユーザにだけ「状況」が「完了」した課題を見せたいとき
(1)ログインユーザが所属するグループのグループIDをすべてチェックし、
管理者グループ(グループID:1)に一致する場合は管理者、それ以外は管理者でないと判定する。
(2)管理者でないと判定された場合は「状況」が「未着手」「実施中」「保留」の課題のみ表示されるようフィルタリングする。
<スクリプト>
let adminFlg = false;
for (let groupId of context.Groups){
if(groupId == 1) {
// (1)
adminFlg = true;
}
}
if (!adminFlg) {
// (2)
view.Filters.Status = '["100","200","910"]';
}
[context.Groups] ・・・ログインユーザが属するグループの情報
[view.Filters.Status] ・・・「状況」のフィルタリング設定
<管理者グループに属するユーザの表示>
未:未着手 実:実施中 留:保留 完:完了
<管理者ではないユーザの表示>
【パターン3】管理者ユーザに複数条件で絞り込んだ課題のみをチェックさせたいとき
ログインユーザが管理者ユーザ(ユーザID:2586)の場合に以下の条件でフィルタリングする。
(1)「状況」が「実施中(200)」かつ「分類A」が「開発」の条件を設定する。(AND条件1)
(2)「状況」が「保留(910)」かつ「分類A」が「設定」の条件を設定する。(AND条件2)
(3)AND条件1とAND条件2をOR条件として設定する。
<スクリプト>
if (context.UserId == 2586) {
//(1)
let data1 = {};
data1.Status = '["200"]';
data1.ClassA = '["開発"]';
//(2)
let data2 = {};
data2.Status= '["910"]';
data2.ClassA = '["設定"]';
//(3)
let data = {};
data.and_Filter1 = JSON.stringify(data1);
data.and_Filter2 = JSON.stringify(data2);
view.Filters.or_Filter = JSON.stringify(data);
}
[data1.Status],[data2.Status] ・・・「状況」
[data1.ClassA],[data2.ClassA] ・・・「分類A」
[data.and_Filter1],[data.and_Filter2] ・・・AND条件のフィルタリング設定
[view.Filters.or_Filter] ・・・OR条件のフィルタリング設定
<管理者ユーザの表示>
どんな時にビューのフィルタリングが必要?
はじめまして、CCSで開発を担当しています阿原と申します。
早速ですが、みなさんはプリザンターを使用していて、特定のレコードだけをユーザに見せるように制御したいと思ったことはありませんか?
表示の絞り込み制御は、ビューを作成して条件を登録しておくことで可能ですが、ビューはどんなユーザでも使用することができるため、見せない制御をすることは難しいです。また、「レコードのアクセス制御」で権限を設定することができますが、レコード1件1件に設定する必要があります。
そこで今回は、「サーバスクリプトでビューのフィルタリングを設定し、見せる・見せないの制御」を実現してみたいと思います。