インシデントテーブルを例に、assigned toの本人、Assignment groupのメンバーいずれかにのみレコードの閲覧を許可するACLの例※デフォルトの余計なACLはいったん無効化した状態を前提とする。
その1テーブルの閲覧許可。
その2レコード単位の閲覧許可
割と簡単な設定で関係者(=ここではAssignment groupとAssigned toのいずれかに含まれる者とした)レコード単位のアクセスコントロールが可能となった。
実際にはほかにも、書き込み権限の設定、デフォルト機能への影響や、レポートビュー関連など考慮すべきポイントは多いが基本的な考え方はこれで行けて、特にスクリプトも必要ない事がわかった。
Admin overrideにしているのでAdminだとすべてのレコードが見えているが・・・
Impersonateしてみると、ちゃんと表示が減っている。
「Number of rows removed from this list by Security constraints: 15」というのはAdminでは67行表示されていたのに対して件数が違う気がするが、気にしないことにしよう・・・。
裏取はしてないが、1ページの表示件数=20から、今表示されている5件を引いた、15件でメッセージが出ている気がする。
ちょっと微バグっぽい?
【追記】
やはり「Number of rows removed from this list by Security constraints: 15」というのはこのページ内で、15件表示が省かれている、という意味で正解だった。
このやり方だけだと、5件しか閲覧可能レコードが無い様に一見見えるが、次ページに表示を切り替えると次ページも同じアクセス制御ルールで表示が省かれた状態でリストアップされる。
正直これは使いにくい。
回避するには恐らく、デフォルトでACLに設定したのと同じ動的条件のフィルタを設定してやる必要がある気がする。
他にやり方があればそれでもいいが・・・。
レコード単位のアクセス制御を実際使える状態にするには、もう少し継続検討が必要なようだ。
【追記2】
リスト画面でACLと同条件のフィルタを掛ければ、ページを切り替えなくてもACL上表示可能なものが、画面表示の件数分詰めてリスト表示される状態にはなった。
ただし、デフォルトで用意されている、リストビューにグローバルのデフォルトフィルタを設定する方法はどうやら見当たらない様だ。
アプリケーションメニューでフィルタ付きリスト画面へのリンクを作っておくしかないのかもしれない。
なんかスマートじゃないからACLだけで見れないレコードは詰めて表示する方法があったらいいな。。。
0 件のコメント:
コメントを投稿