Ploneの認証とユーザ権限の考え方
Ploneには標準でユーザ認証機能が備わっています。ユーザごとに出来ることを制限する仕組みも内蔵しています。コンテツから見ると全てのコンテンツの状態で閲覧制限を行うワークフローの仕組みも備わっています。反面、全ての仕組みを理解するのが難しく、Ploneの考え方に沿ったカスタマイズがされないケースも多く見受けられます。
このエントリーでは、各種用語の解説とそれぞれの役割について記述したいと思います。
関連用語
- ユーザ (User)
ログインユーザ。パスワードや連絡用メールアドレス、表示名などを持っている
- グループ (Group)
ユーザを束ねるための物。
- ロール (Role / 役割)
役割として、ユーザなどを紐付けることが出来る
- パーミッション (Permission / 権限)
操作(例えば、閲覧や編集など)の出来ることを定義しておく。ロールと組合せてユーザに対して、それぞれの操作が出来るかどうかを判定。
- 上位継承・獲得 (Acquisition)
フォルダ構造の上位からパーミッションとロールの関係などを引き継ぐかどうかを設定。
- ローカルロール (Local Role)
フォルダ構造の下位階層で、専用のロールを作ることが可能。共有設定で行ったそのフォルダでのユーザ/グループとロールの関連設定。
- 共有設定 (Share)
フォルダ構造の下位階層やコンテンツ自身に、ユーザ又はグループとロールの関係を付加する事が出来る。
上位からの継承を切ることで、上位の設定の引継ぎも可能。
- ワークフローの状態 (State)
フォルダを含むコンテンツの状態を言う。状態毎に、サイト全体で決まっている、ロールとパーミッションの関係を上書きすることが可能。つまり、この状態の時は、あるロールを持たないと閲覧できないなどの権限を設定できる。
- ワークフローの遷移 (Tradition)
ワークフローの流れを決め、次の状態を宣言する。この遷移を、誰が行うことが出来るかを、ロール / パーミッション / 専用スクリプト のいずれかで宣言できる。
基本概念
関係性
- ユーザとグループ
ユーザはグループに所属することが可能。複数のグループに所属することも可能。
グループは別のグループに所属することが可能。(たしかPlone 4の新機能)
- ユーザとロール
ユーザは複数のロールを持つことが可能
- グループとロール
グループは複数のロールを持つことが可能
- ロールとパーミッション
ロールとパーミッションの関係を表すテーブル(表)があり、どのロールにどのパーミッションを許可するかを定義している。これをZMI(Zope管理画面)【画面キャプチャ参照】から確認・設定変更することが可能
設定等
ユーザやグループをなにかしらのロールにするとういことは、サイト全体での役割を持つことになります。
つまり、この人は、「サイトの管理全てが出来ます」や 「コンテンツの追加が出来ます」というふうになります。
小さな組織やサイトでこれで十分かもしれませんが、そうでない場合、フォルダ毎に設定を行いたいということが発生します。
その時に使うのが、「共有設定」【画面キャプチャ参照】です。
複雑な理由
権限関係は複雑になりやすく、思ったような制御が出来ないことが有ります。
Ploneではなるべく現実世界に近づけられるように設定が可能になっています。しかし、それらを考えるのが難しく、何が出来るのかを理解してく必要があります。
考え方
まずは、3次元の「ユーザ -> ロール -> パーミッション」の関係整理が必要です。
次に、フォルダ構造(コンテンツの位置)毎に、「ユーザ -> ロール」の関係を整理する必要があります。
最後に、ワークフローの状態に応じた、「ロール -> パーミッション」の関係を決めます。(この時、ワークフローの遷移を行えるのはどのようなロールやパーミッションか?も考える必要があります)
この順番で考えることで、思ったような制御が可能になります。
もちろん、ユーザをどのグループに所属させるかを考え、「ユーザ -> ロール」を「ユーザ -> グループ -> ロール」と次元を増やして考えていく必要はあります。
よくある間違い
直接ユーザIDなどを指定
- コードレベルでカスタマイズする際に、ユーザIDなどで出来ることを制限する。
- 上記に似た例で、専用のロールを作ってしまい、そのロールで出来ることを制限する。
上記の2つは、きちんとパーミッション(権限)を作りコントロールすべきです。