<目次>
プリザンターでアクセス制御を行う方法(明細単位)
課題
対策①:サーバスクリプトによる制御
抽出項目の選定と確認
サーバスクリプト設定例
疎通確認
対策②:サイトのアクセス制御を使う方法
対策②のテスト
プリザンターでアクセス制御を行う方法(明細単位)
■課題
・プリザンターでワークフローを作る際、自分が「起票者」「承認者」以外の明細も参照できてしまう
↓
・これはセキュリティ観点で良くないため、自分が「起票者」「承認者」の明細のみを表示するよう制御したい
↓
・本記事では、この課題に対する解決策を記載します。
(図111)
>目次にもどる
■対策①:サーバスクリプトによる制御
- サーバスクリプトの「view.Filters」を用いて、「一覧の読み込み時」に自身が「作成者(Creator)」or「承認者(Manager)」のレコードのみを抽出します。
- サーバスクリプトはその名の通り、サーバ側で動くJavaScriptです。JavaScriptというと、クライアント側(ブラウザ)で動作するイメージがありますが、Pleasanterではサーバサイドの様々なイベント時(例:ビュー処理時など)における処理もJavaScriptで記述する事ができます。
●① 抽出項目の選定と確認
どの項目で絞るか?を決めます。今回の例では「申請者」と「承認者」で絞ります。
(図121①)
↓
●②「テーブルの管理」→「一覧」で対象項目の表示名(デフォルト値)を確認します。
※この値がJavaScriptで項目を識別する際の変数名になります。
(例)「申請者」はデフォルトでは「作成者」(システム的には「Creator」)である
(図121②)
(例)「承認者」はデフォルトでは「管理者」(システム的には「Manager」)である
(図121③)
>目次にもどる
●③ サーバスクリプト設定例
・「テーブルの管理」→「サーバスクリプト」を選択
(図122①)
↓
・下記のサンプルプログラムを適用し、「条件」は「ビュー処理時」を選択し、「変更」を押下
(図122②)
(図122③)
(サンプルプログラム)※システム管理者のIDはご自身の環境に合わせて変更してください。
// *** 自身が起票者or管理者の明細のみ表示 *** //
// システム管理者のIDをセット
let sysUserId = [282762];
// ログインユーザーがシステム管理者でない場合
if (!sysUserId.includes(context.UserId)) {
// 空のオブジェクトを作成
let data = {};
// 作成者(Creator)にユーザーIDを代入
data.Creator = context.UserId;
// 管理者(Manager)にユーザーIDを代入
data.Manager = context.UserId;
// 作成者or管理者の明細のみを表示するフィルタを適用
view.Filters.or_MyFilterName = JSON.stringify(data);
}
●④ 疎通確認
(テスト1)管理者以外
・再度一覧を確認すると、自身が申請者or承認者のもののみが表示されるようになりました。
(図131)
↓
(テスト2)管理者
・[282767] のシステム管理者でログインすると、全ての明細を見る事ができます。
(図132)
(参考)
・context(公式マニュアル)
・view.Filters(公式マニュアル)
・項目のカラム名一覧
■対策②:サイトのアクセス制御を使う方法
こっちの方がシンプルで簡単かもです。
●① グループを作成
(図211)
●② グループにメンバーを追加
→ 全部の明細を見られる人を指定
(図212)
●③「サイトのアクセス制御」で作成したグループに権限付与
・【対応する側】:全レコードを操作できる権限
(図213)
・【依頼する側】:全ユーザーに起票&更新できる権限(誰でも問合せできる)
(図215)
(図214)
・【依頼する側】:自分が起票したもののみ操作できる
(図216)
>目次にもどる
●④ 対策②のテスト
・【対応する側】:全レコードを操作できる事のチェック
(図223)
・【依頼する側】:全ユーザーに起票&更新できる事のチェック
例1
(図221)
例2
(図222)
>目次にもどる