MODX Revolutionの権限設定
先日、僕がMODX Revolutionの権限設定についてボヤいしていたらえのぐさんがブログでまとめてくれました。ありがとうございます。 こちらも勉強がてら試しにアクセス権限の設定をしてみました。
例によってMODXデモサイト使います。現時点で最新の「2.2.3-pl-ja」バージョンのMODX Revolutionを展開し、適当にサイトをでっち上げます。
図1.管理画面
図2.トップページ
ニュースリリースを含め適当なページを作成。getResourcesを使ってトップページにニュースリリース一覧も表示させてます。
やりたいことは次の通り。
至ってシンプルなやりたいことですね。ところが設定は案外ややこしい…。
では早速設定を開始しようか…となりますが、設定する場所がいくつかあるので順番に設定していきます。
各リソースを所属させることができるリソースグループを作成します。リソースグループは次の2つを作成します。
何故わざわざ一般グループを作るのかと言うと、どうもグループに属していないリソースはデフォルトで編集権限が与えられるみたいなので、全リソースを明確にグループに所属させます。
図3.ニュースグループ作成
図4.一般グループ作成
メニュー「権限管理」→「リソースグループ」から「リソースグループを作成」で作成画面が開きます。設定は上記画面キャプチャの通りで、赤枠で囲ってる2つのチェックを入れます。これでユーザグループで管理者に所属している人にはこのリソースグループの編集権限が与えられ、ログインしていないゲストユーザには閲覧権限が自動で与えられます。
図5.リソースをリソースグループへ
リソースをドラッグ&ドロップで移動させ、全リソースを各グループへ所属させます。今回は「トップページ」「このサイトについて」を「一般グループ」とし、それ以外を「ニュースグループに所属させています。
ニュース編集用のロールを作成します。
図6.ロール作成
メニュー「管理権限」→「ユーザグループとロールの管理」から「ロール(役割)」タブを選び、「新規作成」で作成画面が開きます。 赤枠の特権レベルはとりあえず9000にしています。特権レベルは数字が小さい方が数字が大きい特権もまるっと継承するって事ですが、今回は管理者(0)、メンバー(9999)しかいないのでその間の適当な数字を設定しました。
ニュースグループのみ編集権限をもつユーザグループ「ニュース編集」を作成します。
図7.ユーザグループ作成
メニュー「管理権限」→「ユーザグループとロールの管理」から「ユーザグループ」タブを選び「新しいユーザグループ」で作成画面が開きます。 赤枠の管理ポリシーは「Content Editor」にします。ちなみに必須項目なので選んでるのですが、この設定がどこで効いているのかがいまいちわからず…。
図8.ユーザグループの編集
続けて作ったユーザグループを更に編集する為、作成した「ニュース編集」を右クリックして「ユーザグループの編集」をクリックします。
図9.ユーザグループのコンテキストのアクセスタブ
mngコンテキストにリソース編集権限でアクセスできるようにコンテキストを追加します。編集画面の「コンテキストのアクセス」タブから「コンテテキストを追加」を開きます。
図10.コンテキストの追加
設定は画像キャプチャの通りに。アクセスポリシーはContent Editorにしています。ちなみにアクセスポリシーでLoadOnly等弱い権限を選んだ場合、管理画面自体にもログインできない。
図11.ユーザグループのリソースグループのアクセスタブ
先ほど作成したリソースグループ「ニュースグループ」「一般グループ」のアクセス権限を設定します。編集画面の「リソースグループのアクセス」タブから「リソースグループを追加」を開きます。
図12.ユーザグループにリソースグループ(ニュースグループ)を追加
設定はキャプチャの通り。アクセスポリシーはResourceです。
図13.ユーザグループにリソースグループ(一般グループ)を追加
設定はキャプチャの通り。アクセスポリシーはLoad,List and Viewでいわゆる読み込み専用です。ちなみにこの設定を行わないと「一般グループ」所属するリソースは管理画面で見ることもできなくなります。
図14.ユーザグループにリソースグループ(ニュースグループ)を追加2
図15.ユーザグループにリソースグループ(一般グループ)を追加2
同じ手順であと2つリソースグループを追加します。設定はキャプチャを参照してください。赤枠のコンテキストが違います。この設定がないとプレビューする事ができません。
図16.ユーザグループに追加したリソースグループ一覧
最終的には上記のようになっていると思います。
いよいよ、ユーザ作成です。
メニュー「権限管理」→「ユーザ管理」から「新規ユーザ」を開きます。よく赤枠の「有効」にチェックを入れ忘れて、あとから修正する事がよくあります。パスワードやメールアドレスの設定は適当に。「一般設定」に続けて隣のタブの「アクセス許可」を設定します。
「ユーザをグループに加える」にて「ニュース編集/ニュース編集ロール」のアクセス許可を追加します。
それではやっと動作確認…ではありますが、ここで注意事項。権限設定を行った後、ちゃんと設定しているはずなのにうまく動作していないと思ったらMODXキャッシュのクリアやブラウザのcookie削除(ブラウザ再起動)をやってみてください。時々この辺りが悪さをする事があるようです…えぇ、どハマりしました…。
図19.公開側画面
まずはログインせずに公開側を見てみます。トップページも見れますし、キャプチャは載せてないですがニュースリリースの中も確認できました。
図20.トップページ編集画面
newsユーザでMODXの管理画面にログインし、トップページの編集画面を開いてみました。編集画面上部に「保存」ボタンがなくなっています。見ることはできますが、編集はできなくなっているようです。
図21.ニュースリリース編集画面
一方ニュースリリースの編集画面は上部に「保存」ボタン等が表示されていて、実際に編集もできました。
図22.リソースの新規作成
リソースの新規作成はニュースリリースの配下以外では作成できませんでした。上記では「test」とうリソースを試しに作ってみました。適当に動作確認したところなんとなくそれっぽい感じになってそうですね。
大体大丈夫かなと思いきや一つ問題点がありました。
図23.リソースの公開チェックボックス
作成したリソースを公開しようにも何度「公開する」にチェックを入れても公開状態になりません。同じように公開しているリソースを非公開にする事ができません。これはニュース編集グループのmngコンテキストのアクセスポリシー「Content Editor」に公開/非公開権限がないためです。というわけで、このポリシーを修正します。
図24.アクセスポリシーの編集
メニュー「管理権限」→「ユーザグループとロールの管理」から「アクセスポリシー」タブを選び「Content Editor」を右クリックし、編集画面を開きます。
図25.publish_documentのチェック
「publish_document」という項目を探し出しチェック、そして保存します。
newsユーザがまだログインしていたらいったんログアウト、再度ログインしてから「公開する」にチェックを入れてちゃんと動作するか確認します。
ニュースリリース配下で新規に作成したリソースにはリソースグループが設定されていません。そのため、他のリソースの作成権限しか持ってないユーザでも新規に作ったリソースに限っては編集権限を持ってしまいます。多分なんらか対策があるとは思うのですが、そこまでは調べきれていません(設定にリソースグループの継承があると嬉しいな…)。他の回避方法としてニュースリリースのリソース自体を他のユーザから隠してしまってもよさそうですが、ちょっと後ろめたいですね。
簡単に説明したかったんだけど無理だった。