前回の続きです。レコードのアクセス制御についてあれこれやってみています。
プリザンターのアクセス権にはざっくり以下の種類があるようです。
①フォルダのアクセス権
②サイトのアクセス権
③レコードのアクセス権
④項目のアクセス権
今シリーズでは③レコードのアクセス権にフォーカスを当ててあれこれやっています。こうやったらどうだろ。。。と試行錯誤しながらやっているので「これは正解ではない」と思うところがありましたらコメントなどでご指摘いただけるとありがたいです。
※おことわり
2024年1月時点の情報です。プリザンターのバージョンは 1.3.50.2 です。Google Chrome でやっています。
javascript,html,cssともに初心者です。調べながら、やってみながら、きっとこうすればいいんだ!という感じで書いていますので、間違っている場合、効率的な書き方ではない可能性が大いにあります。間違ってるよ!とか、こうしたほうがいいよ!ということがありましたら、コメント等で教えていただけると大変ありがたいです。
1.所属する組織のユーザーが作成したレコードしか見えないようにする
(1)やりたいこと
前回やったことの「組織」版です。自分が所属する組織のユーザーが作成したレコードは見えるが、ほかの組織のユーザーが作成したレコードは見えない。
これはよく使います。たとえば「休暇申請」等、部内で管理するべきサイトがあり、その部署ごとにサイトを作るのでは効率が悪い。同じサイトで部署ごとに管理できるようにするには「その部署の人が作成した文書だけ見える」としておけば、部署ごとにサイトがあるのと同じ状況が作れる。サイト管理者だけがすべてのレコードを横断的に見えるようにしておけばOK。
(2)サイトのアクセス制御
すべてのユーザーに「作成」の権限を付与。
もしくは部署を限定するのであれば、そのサイトを使用する部署を指定し各部署に「作成」権限を付与。もしくは利用部署をグループに登録し、そのグループに「作成」権限を付与。
今回は経理部、総務部を指定した「経理総務」グループを指定し、「作成」の権限を付与しました。今回はエクスポートもできるようにしたいので「エクスポート」にもチェックを入れました。
開発者の佐々木さん(開発部)、このサイトの担当者の田中さん(総務部)には管理者権限を付与しています。

(3)レコードのアクセス制御
レコードのアクセス制御タブに切り替えて「組織」を有効化し、「読取り」「更新」「削除」「メール送信」にチェックを入れました。

(4)結果
総務部の田中さん、山田さん、鈴木さんがレコードを作成しました。
経理部の高橋さん、加藤さんもレコードを作成しました。
経理部の加藤さんがログインした場合、自分が作成した文書と経理部の高橋さんが作成した文書も見えます。経理部のほかの人(高橋さん)が作成した文書を加藤さんが更新することもできます。ただし、他部(総務部)の人が作成したレコードは一覧に表示されません。
総務部の吉田さんがログインした場合、総務部のほかの人が作成した文書が見えます。ほかの人が作成あいた文書を更新することもできます。ただし、他部(経理部)の人が作成したレコードは一覧に表示されません。
また、サイトのアクセス制御で「作成」のほかに「エクスポート」も許可しているため「エクスポート」ボタンも表示されています

(5)エクスポートボタンを押した場合の挙動
エクスポートしたら、ほかの部のも出てきてしまうのでは・・・なんて思ったりしたのですが、エクスポートボタンを押したときの挙動はアクセス権を設定していない場合でも、フィルタされているレコードだけ出力されるので、見えているレコード、つまり自分の部署のレコードだけがエクスポートされました。
2.所属する組織が指定されているレコードしか見えないようにする
前項1で、「所属する組織が作成したレコードだけ見える」というのはできました。しかしこれでは「組織の人が作成したレコード」であることが必要であり、他部署の人がこのレコードはこの部署、このレコードはこの部署の人だけにみせたい、と部署を指定してレコードを作成することができません。
ここであきらめてはいけない!「分類」項目を使うことで、実現することができます。
(1)やりたいこと
店舗は「武蔵村山店」「多摩店」「所沢店」「狭山店」があります。
営業部のひとが、店舗ごとのレコードを作成。そのレコードを各店舗が閲覧し、コメントを記入する。
各店舗は「店舗」グループ(グループID5)に登録されています。

(2)エディタの設定
店舗を登録するために「分類A」を設定します。「管理者」項目にはレコードの作成者(営業部の人)、「店舗担当者」には「指定店舗」で選択した店舗に所属するユーザーが選択できるようにします。
①分類A
表示名は「指定店舗」とし、店舗グループ(グループID5)所属の組織(店舗)が選択肢に表示されるように、選択肢一覧に以下のコードを入力します。
「自動ポストバック」をオンにしておきます。
[
{
"TableName": "Depts",
"View": {
"ColumnFilterHash": {
"Groups": "[5]"
}
}
}
]

②管理者
表示名:営業部担当者
選択肢一覧:[[Users]]
規定値:[[Self]]
③担当者
表示名:店舗担当者
選択肢一覧:以下のコードを入力します(分類Aで選択した部署のユーザーが表示されるようにする)
[
{
"TableName": "Users",
"View": {
"ColumnFilterExpressions": {
"DeptId": "[@ClassA]"
}
}
}
]

ご参考まで。分類の選択肢の指定方法は、こちらの記事でやっています。
【pleasanter】ユーザー、組織、グループあたりをあれこれやってみた②~プルダウンリストのフィルター、ソート
(3)サイトのアクセス制御
管理者として営業部の山田さん、開発部の佐々木さんを登録します。
管理する側として「営業部」を指定し、「書き込み」の権限を付与します。
サイトを閲覧できるように「店舗」グループを登録します。店舗側に「作成」をしてほしくないので、「作成」権限はつけられない。「閲覧」を付けるとほかの店舗のレコードも全部見えちゃう。では、どうしよう。…「メール送信」の権限をつけました。

(4)レコードのアクセス制御
レコードのアクセス制御タブに切り替えます。
「ユーザ」や「組織」と並んで「指定店舗」(分類A)が選択できるようになっています。「店舗」グループが選択できるようになったわけではなく、分類項目としての「指定店舗」項目が選択できるようになったのです。
どうやら、分類項目の選択肢に [[Users]]、[[Depts]]、[[Groups]] を指定すると、レコードのアクセス制御で選択可能になるようです。
「指定店舗」を選択し、「有効化」をクリックします。
アクセス権限は見て、更新してほしいので「読取り」と「更新」。削除はしてほしくないので「削除」のチェックは外しました。「メール送信」はとりあえずチェックを付けておきました。

(5)営業部の人がレコードを作成する
営業部の人が店舗のレコードを作成していきます。
分類A「指定店舗」に選択肢から店舗を選択して指定します。管理者「営業部担当者」にはレコード作成者が自動入力されます。適宜コメントなどを入力します。
営業部の人はこのサイトの文書は全部見えます。

(6)店舗の人がレコードを確認し、更新する
多摩店の鈴木さんがログインし、このサイトを開きました。
多摩店のレコードだけが表示されています。鈴木さんはそのレコードを開いて、入力、更新することができました。

3.自分が指定されたレコードしか見えないようにする
前項2と同じようなパターンですね。前回、自身が作成した文書だけを一覧に表示する、というのをやりましたが、やはり「その人が作成しなければならない」という制約があります。
ほかの人がレコードを作成し、「担当者」に指定したユーザーだけがそのレコードを閲覧できる、というのをやってみます。(あ、もちろん管理者も見れるようにします)
(1)やりたいこと
総務部所属のユーザーが各部署の人あてのレコードを作成します。「担当者」項目に対象のユーザーを指定します。指定された人はそのレコードを開いて内容を確認、入力して更新します。
レコードは指定されたユーザーおよび総務部のユーザーにしか見えないようにします。
(2)エディタの設定
■担当者
表示名:指定担当者
選択肢一覧: [[Users]] ※
規定値:空欄
※選択肢一覧は単に [[Users]] でもよいのですが、部名などが出たほうが選択しやすいように思いましたので、選択肢一覧に以下のコードを入力してもよいです。
[
{
"TableName": "Users",
"SearchFormat": "[Name] ([UserCode])- [Dept]",
"View": {
"ColumnSorterHash": {
"DeptCode": "asc",
"UserCode": "asc"
}
}
}
]
■管理者
表示名:総務部担当
規定値:[[Self]]
選択肢一覧:基本的には作成者だが、総務部のユーザーであれば作成者ではなくても指定できるように、総務部(組織ID2)のユーザーから選択するように以下のコードを入力
[
{
"TableName": "Users",
"View": {
"ColumnFilterHash": {
"DeptId": "2"
}
}
}
]

(3)サイトのアクセス制御
「全てのユーザ」に「メール送信」権限
「総務部」に「書き込み」の権限
総務部田中さん、開発部佐々木さんに「管理者」権限

(4)レコードのアクセス制御
レコードのアクセス制御タブに切り替えます。
「指定担当者」を選択し、「有効化」ボタンをクリック。
「詳細設定」で「読取り」「更新」「メール送信」にチェックを付けて、その他のチェックは外します。

(5)総務部の人が閲覧対象のユーザーを指定したレコードを作成する
総務部の鈴木さんがレコードを作成します。
「指定担当者」にマーケティング部の吉川さんを指定したレコード、経理部の渡辺さんを指定してレコードを作成しました。
(6)一覧画面がどうみえるか
総務部のユーザーはすべての文書が見えます。総務部以外のユーザーは「指定担当者」に自身が指定されたレコードのみ閲覧できます。

4.担当者または管理者に自分が指定されているレコードしか見えないようにする
サーバースクリプトのフィルターで閲覧権限制御をやった時に、「担当者または管理者が自分のIDの時にレコードを表示(OR条件)」というのをやりました。
これも、アクセス制御で実現できます。
(1)やりたいこと
「担当者」「管理者」のいずれかに自分が指定されている場合、そのレコードが閲覧、更新できる。
(2)テーブルの管理
「担当者」「管理者」の選択肢一覧を [[Users]] とします。
(3)テーブルのアクセス制御
「読取り」のチェックが外れていればなんでもいいのですが、「作成」のみにチェックとしました。
別途、一人以上にサイト管理者の権限を付けるのをお忘れなく。
(4)レコードのアクセス制御
「担当者」と「管理者」を有効化します。
どちらも「読取り」「更新」にチェックを入れます。

(5)どのように見えるか
下図のレコードがあったとします。1つ目のレコードは管理者が川口さん、担当者が田中さんになっています。
川口さん、田中さんにそれぞれログインしてみてもらいましょう。

田中さん、川口さんとも担当者、管理者に自身がセットされているレコードのみ一覧に表示されました。

(6)部署内でのみ、担当者・管理者に自身が指定されているレコードだけ見えるようにする
たとえば部内で完結する申請書で、
条件①部内にしか見えない(ほかの部には見えない)
条件②申請者、および申請者が指定した承認者だけが当該レコードを閲覧できる
。。というのをやりたかったとします。
いろいろな合わせ技を使えばできるか・・・?と考えた結果、承認者の選択肢に自部署のユーザーだけ選択できるようにすればよいのでは、と思いました。
①エディタの設定
■分類A
表示名:部署
選択肢:[[Depts]]
規定値:[[Self]]
読み取り専用:ON
自動ポストバック:ON
■担当者
表示名:申請者
選択肢:[[Users]]
規定値:[[Self]]
読み取り専用:ON
■管理者
表示名:承認者
選択肢:以下のコードを入力(ログインユーザー=レコードの作成者の部署に所属するユーザーを選択肢に表示します)
[
{
"TableName": "Users",
"View": {
"ColumnFilterExpressions": {
"DeptId": "[@ClassA]"
}
}
}
]
②サイトのアクセス制御
すべてのユーザー:作成
③レコードのアクセス制御
「申請者」(担当者)および「承認者」(管理者)を有効化、「読取り」「更新」にチェック
結果は割愛しますが、思った通りのものができました。
5.自部署のレコードは見えるが更新できるのは自分が作成した文書だけ
(1)やりたいこと
自分の部署のレコードは見える(1でやった)。
自分の作成したレコードは更新できる。自部署のほかの人が作成したレコードは閲覧できるが更新できない。
(2)サイトのアクセス制御
「全てのユーザ」に「作成」権限
(管理者は1名以上設定しておきます。)

(3)レコードのアクセス制御
「組織」を有効化。「読取り」権限にチェック。
「ユーザ」を有効化。「読取り」「更新」「メール送信」にチェック

(4)結果
下図のように3つのレコードがあります。うち1つは総務部の田中花子さんが作成した文書。うち2つは営業部の木村さん、佐藤さんが作成した文書です。

営業部の木村さんがログインしてサイトを見てみました。
営業部の2つのレコードが表示されています。
木村さんが作成した文書を開くと内容の入力が可能で「更新」ボタンも表示されています。
佐藤さんが作成した文書を開くと「読み取り専用」となっていて、更新ができないようになっています。

6.最後に
いろいろやってみましたが、実はレコードのアクセス制御に2段あって。。。下の段を見落としていた。
上の段が「レコード作成時の許可」で下の段が「レコード更新時の許可」とある。
これまで「レコード更新時の許可」は何も設定してこなかった。いったいこれは何の意味があるのだろうか。いろいろやってみたけど意味が分からなかったので。。。知っている方いたら教えてください。どんなときにつかうんだろ。
7.参考文献、記事
公式マニュアル
プリザンターのアクセス制御
テーブルの管理:アクセス制御:レコードのアクセス制御
テーブルの管理:アクセス制御:項目のアクセス制御
テーブルの管理:ビュー:詳細設定:アクセス制御タブ
テーブル機能:レコードのアクセス制御
FAQ:自分が作成したレコード、または自分が所属するグループや組織が作成したレコードのみ閲覧できるようにしたい
内部リンク
【pleasanter】レコードのアクセス権についてあれこれやってみた①
【pleasanter】サーバースクリプト~一覧のフィルター~ユーザー組織あたりをあれこれやってみたシリーズ⑪
【pleasanter】サーバースクリプト~一覧のフィルター~ユーザー組織あたりをあれこれやってみたシリーズ⑫
【pleasanter】プリザンターでアンケートを作ってみた①基本編
【pleasanter】ユーザー、組織、グループあたりをあれこれやってみた②~プルダウンリストのフィルター、ソート
【pleasanter】テーブル間のリンクとプルダウンリスト~項目間の連携~
【pleasanter】テーブル間のリンクとプルダウンリスト~Sort、Filter~
もう読みました?プリザンターの概要、インストール方法から基本操作方法、導入事例、サンプル等役に立つ情報が満載!
コメント