リソースグループについてのご質問
リソースグループについてのご質問
お世話になります。
現在、コンテキスト毎に完全に独立したサイトを運用出来るように設定・権限を調整しているのですが、
1点解決できていない問題があり、投稿いたしました。
:前提
運用は下記のように行いたいと考えております。
一つのサイトに付き、下記の設定を用意します
・コンテキスト
・カテゴリー
・リソースグループ
・メディアソース
・ユーザーグループ
・ユーザー(複数化)
ユーザグループに
・コンテキストのアクセス
・カテゴリーのアクセス
・メディアソースのアクセス
・リソースグループのアクセス
を設定し、他のユーザグループからはアクセス出来ないようにする。
この運用を行う際、新しくリソースを作成した際、リソースグループにデフォルトで所属するような動作をさせたいのですが、
それは可能でしょうか。
(コンテキスト名・リソースグループ名・ユーザグループ名・メディアソース名 は全て同一にしております)
例えば、test という名前のコンテキスト配下にリソースを作成した場合は、リソースグループ test に自動的に所属するような動作です。
どうぞ、よろしくおねがいします
-----
ご利用のサーバ:AWS(Amazon Linux AMI release 2012.03)
MODXのバージョン:2.2.2-pl (traditional)
PHPのバージョン:5.3.13
MySQLのバージョン:5.5.20
ブラウザ:Google Chrome / FireFox 14.0.1
-----
現在、コンテキスト毎に完全に独立したサイトを運用出来るように設定・権限を調整しているのですが、
1点解決できていない問題があり、投稿いたしました。
:前提
運用は下記のように行いたいと考えております。
一つのサイトに付き、下記の設定を用意します
・コンテキスト
・カテゴリー
・リソースグループ
・メディアソース
・ユーザーグループ
・ユーザー(複数化)
ユーザグループに
・コンテキストのアクセス
・カテゴリーのアクセス
・メディアソースのアクセス
・リソースグループのアクセス
を設定し、他のユーザグループからはアクセス出来ないようにする。
この運用を行う際、新しくリソースを作成した際、リソースグループにデフォルトで所属するような動作をさせたいのですが、
それは可能でしょうか。
(コンテキスト名・リソースグループ名・ユーザグループ名・メディアソース名 は全て同一にしております)
例えば、test という名前のコンテキスト配下にリソースを作成した場合は、リソースグループ test に自動的に所属するような動作です。
どうぞ、よろしくおねがいします
-----
ご利用のサーバ:AWS(Amazon Linux AMI release 2012.03)
MODXのバージョン:2.2.2-pl (traditional)
PHPのバージョン:5.3.13
MySQLのバージョン:5.5.20
ブラウザ:Google Chrome / FireFox 14.0.1
-----
Re: リソースグループについてのご質問
index.php?id=0&a=55&class_key=modDocument&parent=0&context_key=web1
任意のコンテキスト以下で投稿画面を開くと上記のようなクエリを得られるので、$_GET['context_key']で取得した値をリソースグループに割り当てる処理が分かれば実装できそうな気がします。こちらでもあとで試してみます。(コンテキストはなぜかIDで管理されていないので、意外と簡単かも?)
任意のコンテキスト以下で投稿画面を開くと上記のようなクエリを得られるので、$_GET['context_key']で取得した値をリソースグループに割り当てる処理が分かれば実装できそうな気がします。こちらでもあとで試してみます。(コンテキストはなぜかIDで管理されていないので、意外と簡単かも?)
Re: リソースグループについてのご質問
まだ試してませんが、DB構造のほうを確認してみました。
$_GET['context_key']を見るまでもなく、投稿した時点でcontext_keyがリソースオブジェクトとしてストアされているので(当然ですね・・)、この値を取り出して
documentgroup_namesテーブルのnameフィールドで同じ値を持つ行のIDをselectして、
あとはdocument_groupsにそのIDとリソースIDをinsert into(もしくはreplace into)するとよさそうに思います
$_GET['context_key']を見るまでもなく、投稿した時点でcontext_keyがリソースオブジェクトとしてストアされているので(当然ですね・・)、この値を取り出して
documentgroup_namesテーブルのnameフィールドで同じ値を持つ行のIDをselectして、
あとはdocument_groupsにそのIDとリソースIDをinsert into(もしくはreplace into)するとよさそうに思います
Re: リソースグループについてのご質問
http://forum.modx.jp/viewtopic.php?f=32&t=888
忘れてましたが、今のRevoには上記のバグがあるため、新規投稿時にはresource情報を取得できないので、知らないとハマると思います。
その場合は上記トピックに書いてある暫定処理を追記するか、フォームカスタマイズを施しておくなどしておくとよさそうに思います。
(このバグは次回のリリースでは修正されます)
忘れてましたが、今のRevoには上記のバグがあるため、新規投稿時にはresource情報を取得できないので、知らないとハマると思います。
その場合は上記トピックに書いてある暫定処理を追記するか、フォームカスタマイズを施しておくなどしておくとよさそうに思います。
(このバグは次回のリリースでは修正されます)
Re: リソースグループについてのご質問
yama 様
素早い回答有り難うございます。
ご提示頂いた情報を参考にし、対策に取り組んでみます。
作業が完了したら改めてご報告いたします。
素早い回答有り難うございます。
ご提示頂いた情報を参考にし、対策に取り組んでみます。
作業が完了したら改めてご報告いたします。
Re: リソースグループについてのご質問
yamaさんの情報をヒントに、本家のフォーラムなどからリソースグループの割り当て方法を確認すると、
$resource->joinGroup() という手軽なメソッドがありました。
https://github.com/modxcms/revolution/b ... .php#L1048
http://forums.modx.com/index.php/topic,62021.0.html
http://forums.modx.com/thread/44075/mod ... ia-scripts
ということで、リソースの保存時にコンテキストと同名のリソースグループを割り当てるのは、
以下のコードのプラグインをOnDocFormSaveにバインドすれば良さそうです。
リソースの保存後、リソースを再度読み込み直さないと、
リソースグループへのチェックが表示に反映されないようです。
# RevoのAPI幾らか見慣れてきましたが、
# 命名がとっちらかってる感じです。
$resource->joinGroup() という手軽なメソッドがありました。
https://github.com/modxcms/revolution/b ... .php#L1048
http://forums.modx.com/index.php/topic,62021.0.html
http://forums.modx.com/thread/44075/mod ... ia-scripts
ということで、リソースの保存時にコンテキストと同名のリソースグループを割り当てるのは、
以下のコードのプラグインをOnDocFormSaveにバインドすれば良さそうです。
コード: 全て選択
<?php
$success = $resource->joinGroup($resource->context_key);
リソースグループへのチェックが表示に反映されないようです。
# RevoのAPI幾らか見慣れてきましたが、
# 命名がとっちらかってる感じです。
Re: リソースグループについてのご質問
if($success) $modx->cacheManager->refresh();neran さんが書きました: リソースの保存後、リソースを再度読み込み直さないと、
リソースグループへのチェックが表示に反映されないようです。
これでどうでしょう?(パラメータを何か与えないとコンテキスト関係なく全体をrefreshするかもしれませんが)
Re: リソースグループについてのご質問
neran 様、yama 様
ご教示ありがとうございました。
お二人が提示してくださいましたコードを使用し、無事動作し、保存後すぐにチェックボックスのチェックも確認することが出来ました。
また、コンテキスト以下でリソースを作成する場合は問題ないのですが、
リソースツリー上部のボタン「新しいドキュメント」をクリックし、ドキュメントを作成するとコンテキストが web になってしまう問題もありましたが、
そちらは OnBeforeDocFormSave にてリソースのコンテキストを変更し、回避できました。
作成したコードは下記の様になります
※ユーザ毎に、オプションパラメータ「default_context」を設定し、その値を設定するようにしてあります。
また、コンテキスト「web」は使用しない前提です
どうもありがとうございました。
ご教示ありがとうございました。
お二人が提示してくださいましたコードを使用し、無事動作し、保存後すぐにチェックボックスのチェックも確認することが出来ました。
また、コンテキスト以下でリソースを作成する場合は問題ないのですが、
リソースツリー上部のボタン「新しいドキュメント」をクリックし、ドキュメントを作成するとコンテキストが web になってしまう問題もありましたが、
そちらは OnBeforeDocFormSave にてリソースのコンテキストを変更し、回避できました。
作成したコードは下記の様になります
コード: 全て選択
$e = &$modx->event;
switch ($e->name) {
case "OnBeforeDocFormSave":
if(!strcmp($resource->context_key)=='web'){
if($modx->getOption('default_context')!=''){
$resource->context_key = $modx->getOption('default_context');
}
}
break;
case "OnDocFormSave":
if($mode==='new') $modx->cacheManager->refresh();
$success = $resource->joinGroup($resource->context_key);
if($success) $modx->cacheManager->refresh();
break;
}
また、コンテキスト「web」は使用しない前提です
どうもありがとうございました。
Re: リソースグループについてのご質問
yamaさん
当たるとしたらMODExt側なんでしょうか。
ちなみにrefresh()はこいつで、$providersにリフレッシュしたい要素を指定するみたいですね。
https://github.com/modxcms/revolution/b ... s.php#L532
試してないですが、リソースのリフレッシュはコンテキスト単位しかサポートしてない?
岩井さん
私もマルチコンテキストで複数サイト管理しているので、勉強になりました。
joinGroup(), leaveGroup()でリソースグループもう少し活用してみます。
んー、だめですね。保存後xhrでチェックボックスがリロードされてない感じなので、yama さんが書きました: if($success) $modx->cacheManager->refresh();
これでどうでしょう?(パラメータを何か与えないとコンテキスト関係なく全体をrefreshするかもしれませんが)
当たるとしたらMODExt側なんでしょうか。
ちなみにrefresh()はこいつで、$providersにリフレッシュしたい要素を指定するみたいですね。
https://github.com/modxcms/revolution/b ... s.php#L532
試してないですが、リソースのリフレッシュはコンテキスト単位しかサポートしてない?
岩井さん
私もマルチコンテキストで複数サイト管理しているので、勉強になりました。
joinGroup(), leaveGroup()でリソースグループもう少し活用してみます。
Re: リソースグループについてのご質問
そのまま気付かずリソース編集画面の更新ボタンをクリックすると、せっかくのリソース割り当てが外れて事故になっちゃいますね。
ヤッツケな対応ですが、今回はコンテキストごとに完全に独立したサイトを運用するということなので、編集画面ではリソースグループの選択を表示しないのがよいかも?
ヤッツケな対応ですが、今回はコンテキストごとに完全に独立したサイトを運用するということなので、編集画面ではリソースグループの選択を表示しないのがよいかも?
Re: リソースグループについてのご質問
なるほど。プラグインで制御できるなら、制限ユーザーからは隠すべきですね。
formcustomization から modx-resource-access-permissions rigon の非表示、
管理者はユーザーグループで仕切る、で問題無さそうです。
formcustomization から modx-resource-access-permissions rigon の非表示、
管理者はユーザーグループで仕切る、で問題無さそうです。
Re: リソースグループについてのご質問
neran さん
yama さん
マルチコンテキストで、チャンクやテンプレートにも同様の仕様(カテゴリーに割り振る)を作れば
ほぼほぼこちらで想定していた運用ができそうです。
このあたりの機能をまとめれば、割りと簡単に一つの管理画面で複数のサイト編集者を管理できそうです。
(当トピックと話題としてはずれてしまいますが…)
こちらでは上手くチェックはいった状態になったのですが(ページ全体リロードという非常に効率の悪い方法で、ですが)neran さんが書きました:んー、だめですね。保存後xhrでチェックボックスがリロードされてない感じなので、
yama さん
こちらではその運用を行う予定です(現在はテストの為、表示させていましたが)yama さんが書きました:そのまま気付かずリソース編集画面の更新ボタンをクリックすると、せっかくのリソース割り当てが外れて事故になっちゃいますね。
ヤッツケな対応ですが、今回はコンテキストごとに完全に独立したサイトを運用するということなので、編集画面ではリソースグループの選択を表示しないのがよいかも?
マルチコンテキストで、チャンクやテンプレートにも同様の仕様(カテゴリーに割り振る)を作れば
ほぼほぼこちらで想定していた運用ができそうです。
このあたりの機能をまとめれば、割りと簡単に一つの管理画面で複数のサイト編集者を管理できそうです。
(当トピックと話題としてはずれてしまいますが…)