権限→ロール→利用者の順につながったとき、権限と利用者の結び付きをどう参照するか?
利用者→ロール→権限の順にたどって権限収集。ロールも権限も多対多関連。
権限判定はユースケースのコードで行なう。仕組みは権限/錠と権限/鍵の入手までサポート。権限だけが手に入るのでユースケースにロールは見えない。
→ :/利用者をグループでまとめる#q0ba6cbe
利用者間では継承不可 †
元になる上位ロール/上位利用者を変更するときに問題。これが利用者だと複数のロールを束ねたりできるので変更しづらくなる。
権限/継承には元が必要。それも1つだけ。複数だと継承処理に問題。継承をロール間だけに限定して継承処理を簡素にする。
ひとつのユースケースに必要な権限はひとつまで †
ひとつのユースケースに複数の権限が必要なら、権限判定はロール別に行わなくてはならない。(継承した権限を含む)単一のロール内で必要な権限がすべて揃っていれば許可。
→ 権限ひとつで許可が下りるようにする。それでもひとつのユースケースに複数の権限が必要なら、それらをまとめたひとつの権限を作って、それで実現。
継承対象 †
権限の特殊な継承を特定属性に限るか/特定ページ名に限るのか/特定ページ型に限るのか。
この仕様はどのクラスが定義するものなのか。
→権限関係は独立した属性領域(ページ/裏だけでなくページ/属性も複数)に書くので、この属性領域を特別にするといい。ロールページの属性領域/利用者ページの属性領域。
権限の与え方 †
→ :i/ロールの適用方法
利用者ページの属性領域「ロール」の項目に複数書く。
その権限領域の編集権限は…上位の管理者しか持っていないので書けない。
下位の管理者が誰かに権限を与えるのならそのための権限領域(その2)が必要だけど、そこは権限判定で参照されない。
(権限判定では元々の管理者だけが変更可能な信頼できる領域しか使わないので、これは当然)
下位の管理者ロールを作っても、誰にも権限を与えることはできない。
解決策は…
参照する側を対応させない限り無理。
その対応とは、下位の管理者のために作られた権限領域を元除く正領域と同じように扱うこと。信頼する領域を増やす。
元々の管理者が追加指定するとそこも権限領域扱いになる。