初心者が書く初心者同士のためのプリザンター勉強記録です。
前回まで、ユーザー、組織、グループあたりについてあれこれやってました。最後の回ではビューのフィルターでレコードの閲覧制御をかけるなどについてやりました。
それをやっていて、「そういやアクセス権でも作成した人にしか見えないようにするとか、その部署にしか見せないようにするとか閲覧権限の制御をやったなあ」と・・・。以前、プリザンターでアンケートを作ってみたの回でちらりとやったことがありましたが、よくわからずにやっているのでその辺を深堀してみようと思いました。
※おことわり
2024年1月時点の情報です。プリザンターのバージョンは 1.3.50.2 です。Google Chrome でやっています。
javascript,html,cssともに初心者です。調べながら、やってみながら、きっとこうすればいいんだ!という感じで書いていますので、間違っている場合、効率的な書き方ではない可能性が大いにあります。間違ってるよ!とか、こうしたほうがいいよ!ということがありましたら、コメント等で教えていただけると大変ありがたいです。
1.はじめに
まず、アクセス権にはざっくり以下の種類があるのかなと思っています。
①フォルダのアクセス権
②サイトのアクセス権
③レコードのアクセス権
④項目のアクセス権
番号が若いほど粒度が大きく、番号が大きいほど粒度が小さくなりますね。
今回は③レコードのアクセス権にフォーカスを当ててあれこれやってみました。
作成した人にしか見えないようにする、作成したユーザーが所属する組織にしか見せないようにする、は以下のFAQを見ながらやっていました。
FAQ:自分が作成したレコード、または自分が所属するグループや組織が作成したレコードのみ閲覧できるようにしたい
やってはいたのですが、仕組みは理解できてなくて、見よう見まねでやっていた感じ。
先般、以下の記事を見て、あ、なるほどそうゆうことだったのかと、理解が進んだような気になりました。最初にこれを読んでいたらよかった。
プリザンターのレコードのアクセス制御を使いこなす
レコードのアクセス制御の種類
レコードのアクセス制御を実現する方法は下記の通りです。1.レコードに直接権限を付与する方法
引用元;https://qiita.com/Implem/items/f35e876bcd4cb34162f2
2.レコード作成時に自動的に権限を付与する方法
3.拡張SQLでレコードが抽出されるようにする方法
4.サーバスクリプトのview.Filtersでレコードが抽出されるようにする方法
5.拡張SQLとサーバスクリプトの組み合わせでレコードが抽出されるようにする方法
4のサーバースクリプトの view.Filters は前回、前々回でやりました。
拡張SQLは難しそうなので、また今度。。。
今回は2のレコード作成時に自動的に権限を付与する方法にフォーカスを当ててあれこれやってみようと思います。
1のレコードに直接権限を付与する方法は、一つ一つに手作業で権限を付与するのは実際的ではないなあと思いますが、2を理解するうえでやっておいたほうが良さそうなので、まずそこからちらりとやってみまっす。
2.レコードごとにアクセス権を設定する方法
レコードごとに、ひとつひとつ「これは●●さんにみせる」というのを設定してみたいと思います。
(1)サイトのアクセス権
テーブルの管理 → サイトのアクセス制御タブ でサイトのアクセス権を設定します。
(アクセス権の継承は「アクセス権を継承しない」を選択し、新たにアクセス権を設定します)
サイトのアクセス権はすべてのユーザーに「読み取り」の権限を付与しました。
このままでいくと、ユーザーはすべてのレコードを閲覧できるが、編集・更新はできない、ということになります。
営業部の山田さんは「管理者」権限があります。山田さんが文書を作成し、更新できるユーザーを設定していきます。
(2)管理者の山田さんが文書を作成する
①田中さんに編集してもらう文書を作成します。
新規作成で文書を作成し、必要項目を入力します。
「レコードのアクセス制御」タブに切り替えます。ちなみにテーブルの管理権限がないとこのタブは表示されていません。
このレコードの編集権限を付与したい田中さんを検索し、田中さんを選択して「権限追加」をクリックして左の枠に移動します。
「詳細設定」をクリックして、「読取り」「更新」「削除」「メール送信」にチェックを入れた状態で「変更」ボタンをクリック。
文書を「更新」して保存します。
②吉川さんに編集してもらう文書を作成します。
①と同様に新規作成で文書を作成し、「レコードのアクセス制御」タブで吉川さんを権限追加します。
吉川さんの権限は「読取り」「更新」とします。
(3)田中さんがログインした場合の画面
田中さんがログインした場合です。
田中さんにアクセス権限が付与されているレコードは編集が可能です。内容を編集して「更新」ボタンをクリックするとレコードを更新することができます。「削除」「メール送信」の権限も付与されているため、「削除」「メール」のボタンも見えます。
田中さんに編集権限が付与されていないレコードは読み取り専用になっています。
(4)吉川さんがログインした場合の画面
吉川さんがログインした場合です。
吉川さんにアクセス権限が付与されているレコードは編集が可能です。内容を編集して「更新」ボタンをクリックするとレコードを更新することができます。「削除」「メール送信」の権限は付与されていないため、「削除」「メール」のボタンはありません。
(5)あとからレコードのアクセス権限を変更する
なんと、吉川さんが病気になって長期休暇になってしまいました。そして、吉川さんの業務を急遽森田さんが引き継ぎました。吉川さんにアクセス権限が付与されているレコードに森田さんの権限も追加したいです。
そんな時は!サイトの管理権限がある田中さんが変更の操作をします。
吉川さんにアクセス権限が付与されているレコードを開いて、「アクセス制御」のタブで森田さんを追加しました。
そうすることで、森田さんもこの文書を編集できるようになりました。
(6)作成権限について
サイトのアクセス制御では「読取り」のみ許可しています。
なので、管理者の田中さん以外のユーザーには「新規作成」ボタンが表示されていません。
個別に設定するレコードのアクセス制御で「作成」にチェックを入れてもやはり「新規作成」ボタンは表示されません。
3.レコード作成時にアクセス権を設定する方法
2でやった「レコード一つ一つにアクセス権限を設定する」はアクセス権を設定し、「更新」することにより、当該レコードにアクセス権限が設定されました。
3でやる「レコード作成時にアクセス権を設定する」は、テーブルの管理の「アクセス権限」で「レコードのアクセス権」にて、レコードに設定したいアクセス権を登録します。そうすると、その後「新規作成」したレコードには登録したアクセス権が自動設定される、というものです。
注意すべきは、テーブルの管理で「サイトのアクセス制御」では設定を変更したら、サイト内すべてにおいて適用が反映されますが、「レコードのアクセス制御」については、設定後作成した文書には適用されるが、それ以前に作成済の文書に適用されない、というところです。
わたしはここをずっと勘違いしており「変更したはずなのに適用されない・・・」と悩んでおりました。
では、自分が作成した文書だけ「閲覧・更新」ができる、というアクセス権の設定をやってみます。
やりかたは公式サイトのFAQにもあります。
(1)やりたいこと
・すべてのユーザーが閲覧可能なサイトで、自分が作成した文書のみ閲覧・更新が可能としたい。
・総務部が管理するサイトなので、総務部にはすべての文書の閲覧・更新権限を与えたい
なお、すでに作成済のサイトですでに数件のレコードが存在している状態です。
現在の設定は「サイトのアクセス制御」ですべてのユーザーに「書き込み」の権限が付与されている。
現在、加藤さん(開発部)がログインした場合は下図のように見えます。
(2)テーブルの管理でアクセス制御を設定する
サイトの管理者が行います。
管理→テーブルの管理を開きます。
①テーブルのアクセス制御
テーブルのアクセス制御タブで、「全てのユーザー」を選択し「詳細設定」をクリックします。
(「全てのユーザー」が左ペインにない場合は、右ペインから選択して有効化する)
作成のみチェックをつけて、その他の項目のチェックははずします。
総務部がこのサイトの各ユーザーから上がってきた申請の処理をすることとします。総務部には「書き込み」の権限を付与しました(「読取り」「作成」「更新」「削除」「メール送信」「エクスポート」)
②レコードのアクセス制御
レコードのアクセス制御タブで「ユーザ」を選択し、有効化する。
有効化した「ユーザ」を選択し、「詳細設定」クリック。
「作成」のチェックを外し、「読取り」「更新」等許可したい操作権限にチェックを入れる。
今回は「読取り」「更新」「削除」「メール送信」にチェックを入れました。
(2)レコードのアクセス権設定後の動き
①加藤さん(一般ユーザー)
加藤さん(総務部ではない)がログインして、サイトを開きました。
すると、なんということでしょう。さっきまで見えていた2つのレコードもなくなってテーブルの中身が真っ白しろすけです。
これは、サイトのアクセス制御で「作成」しか権限がなく、「読取り」の権限がないからなんですね。
「新規作成」ボタンは押せるので、「新規作成」をクリックして文書を作成しました。
すると、作成したレコードが一覧に表示されています。レコードに対して「読取り」権限があるからですね。レコードを開くと許可した操作「更新」「削除」「メール送信」のボタンも表示されており、許可した操作が実行できることが確認できました。
サイトに対しては「読取り」の権限はない。「作成」の権限はある。なので、「作成」した後は当該レコードに対しては「読取り」「更新」等の権限があるため、作成したあとはこっちのもんだ、自由自在!という感じですね。
②山田さん(一般ユーザー)
今度は山田さん(営業部。総務部ではない)がログインして、サイトを開きました。
真っ白です。先に見えていた2件のレコードも、アクセス権限設定後に加藤さんが作成したレコードも見えません。
山田さんも新規作成で一つ文書を作成しました。そうすると、一覧画面に自信が作成した文書が表示されるようになりました。
③総務部のユーザー
総務部の田中さんがログインしてサイトを開きました。
総務部のユーザーにはサイトのアクセス権限に「読取り」の権限がありますので、すべての文書が見えます。レコードのアクセス制御より、サイトのアクセス制御のほうが優位なんですね。
(3)管理者権限でレコードのアクセス権限を調べる
今度は管理者でログインしてサイトを見てみます。
管理者は「サイトのアクセス制御」で「読取り」を許可されているので全部見えます。
アクセス権設定後に加藤さんが作成したレコードを開いてみます。
「レコードのアクセス制御」タブをクリックすると、そのレコードのアクセス権の状態がわかります。
「レコードのアクセス制御」には加藤さんが自動設定されており、テーブルの管理の「レコードのアクセス制御」で指定した通り、「読取り」「更新」「削除」「メール送信」にチェックが入っています。
これがマニュアルに書いてあったように「レコード作成時に自動的にアクセス権限を設定する」というやつですね。
(4)レコードに対して、個別にアクセス権を設定する
アクセス権設定前に作成していた加藤さんのレコードを見てみましょう(レコードID90)。
レコードのアクセス制御」タブを見ると、アクセス権限にはなにも設定されていないことがわかりました。
ここで、手動で加藤さんに「読取り」「更新」のアクセス権限を設定します。
加藤さんがログインして一覧画面を見てみました。
今さっき個別にアクセス権を設定した文書とアクセス権設定後に作成した文書が見えますl
しかし一つ一つレコードにアクセス権を設定するのは現実的でないので、レコードのアクセス制御を利用して閲覧範囲を制限する場合は、サイト立ち上げの段階で誰にどう見せる?をしっかり決めてからやったほうがいいですね。
4.最後に
今回はここまでで、また次回もレコードのアクセス制御をやりたいと思います。
いろいろやっていると、公式マニュアルに書いてあることが何を言ってるのかさっぱりわからなかったのがわかるようになってきました(なった気がする)
以下、公式マニュアルより抜粋
テーブルの管理:アクセス制御:レコードのアクセス制御
概要
「レコード」の作成時と更新時に「レコードのアクセス制御」を自動的に設定する事が可能です。制限事項
引用元;https://pleasanter.org/manual/table-management-record-access-control
この設定はレコードの作成時と更新時に動作します。既存のレコードの「アクセス権」は変更されません。
上記は、「テーブルの管理」における「アクセス制御」の「レコードのアクセス制御」についての記載です。「テーブルの管理」で「レコードのアクセス制御」を設定すると、レコードの作成時に自動的に作成したレコードにアクセス権が設定される、ということですね。
テーブル機能:レコードのアクセス制御
概要
「テーブル」の「レコード」に「アクセス権」を設定する事ができます。「サイトのアクセス制御」で「アクセス権」を割り当てられていない「ユーザ」にも特定のレコードに対してのみ「アクセス権」を付与することができます。「サイトのアクセス制御」と「レコードのアクセス制御」を同時に設定した場合には、両方の「アクセス権」が有効になります。例えば「サイトのアクセス制御」で「読み取り権限」を付与し「レコードのアクセス制御」で「更新権限」を付与した場合には、「読み取り権限」と「更新権限」の両方が有効になります。制限事項
引用元:https://pleasanter.org/manual/table-record-access-control
1.「レコードのアクセス制御」では「レコード」1件1件に権限の設定を行う必要があります。特定の条件で一覧画面に表示するレコードを絞り込みたいケースでは「サーバスクリプト」の「view.Filtersオブジェクト」または「拡張SQL」の「OnSelectingWhere」を使用してください。
2.「レコードのアクセス制御」で「作成権限」にチェックできますが、作成権限は付与されません。「サイトのアクセス制御」で設定してください。
3.「レコードのアクセス制御」で「エクスポート権限」にチェックできますが、エクスポート権限は付与されません。「サイトのアクセス制御」で設定してください。
4.「レコードのアクセス制御」で「インポート権限」にチェックできますが、インポート権限は付与されません。「サイトのアクセス制御」で設定してください。
5.「レコードのアクセス制御」で「サイトの管理権限」にチェックできますが、サイトの管理権限は付与されません。「サイトのアクセス制御」で設定してください。
上記は「テーブルの機能」としての「レコードのアクセス制御」についての記載です。何が違うかというと、「テーブルの管理」が絡んでないところですね。純粋な「レコードのアクセス制御」についての説明です。
『「サイトのアクセス制御」で「アクセス権」を割り当てられていない「ユーザ」にも特定のレコードに対してのみ「アクセス権」を付与することができます。』とありますが、サイト自体が見れなくてもレコードにアクセス権を付与すれば、そのレコードだけ見ることができるようにもなるんですね。サイトの閲覧権限がないので一覧から開くことはできないから「レコードのリンクから開いて」ってリンクを渡すんでしょうね。
制限事項を読むと、「作成」「エクスポート」「インポート」「サイトの管理」の権限はレコードのアクセス制御でチェックしても、意味がないようですね。チェックボックスはあるけど。
5.参考文献、記事
公式マニュアル
プリザンターのアクセス制御
テーブルの管理:アクセス制御:レコードのアクセス制御
テーブルの管理:アクセス制御:項目のアクセス制御
テーブルの管理:ビュー:詳細設定:アクセス制御タブ
テーブル機能:レコードのアクセス制御
FAQ:自分が作成したレコード、または自分が所属するグループや組織が作成したレコードのみ閲覧できるようにしたい
内部リンク
【pleasanter】サーバースクリプト~一覧のフィルター~ユーザー組織あたりをあれこれやってみたシリーズ⑪
【pleasanter】サーバースクリプト~一覧のフィルター~ユーザー組織あたりをあれこれやってみたシリーズ⑫
【pleasanter】プリザンターでアンケートを作ってみた①基本編
コメント