リソースグループについてのご質問

質問全般・改善要望
返信する
岩井裕輔
メンバー
メンバー
記事: 4
登録日時: 2012年8月27日(月) 21:00

リソースグループについてのご質問

投稿記事 by 岩井裕輔 »

お世話になります。

現在、コンテキスト毎に完全に独立したサイトを運用出来るように設定・権限を調整しているのですが、
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
-----
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: リソースグループについてのご質問

投稿記事 by yama »

index.php?id=0&a=55&class_key=modDocument&parent=0&context_key=web1
任意のコンテキスト以下で投稿画面を開くと上記のようなクエリを得られるので、$_GET['context_key']で取得した値をリソースグループに割り当てる処理が分かれば実装できそうな気がします。こちらでもあとで試してみます。(コンテキストはなぜかIDで管理されていないので、意外と簡単かも?)
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: リソースグループについてのご質問

投稿記事 by yama »

まだ試してませんが、DB構造のほうを確認してみました。
$_GET['context_key']を見るまでもなく、投稿した時点でcontext_keyがリソースオブジェクトとしてストアされているので(当然ですね・・)、この値を取り出して
documentgroup_namesテーブルのnameフィールドで同じ値を持つ行のIDをselectして、
あとはdocument_groupsにそのIDとリソースIDをinsert into(もしくはreplace into)するとよさそうに思います
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: リソースグループについてのご質問

投稿記事 by yama »

http://forum.modx.jp/viewtopic.php?f=32&t=888
忘れてましたが、今のRevoには上記のバグがあるため、新規投稿時にはresource情報を取得できないので、知らないとハマると思います。
その場合は上記トピックに書いてある暫定処理を追記するか、フォームカスタマイズを施しておくなどしておくとよさそうに思います。
(このバグは次回のリリースでは修正されます)
岩井裕輔
メンバー
メンバー
記事: 4
登録日時: 2012年8月27日(月) 21:00

Re: リソースグループについてのご質問

投稿記事 by 岩井裕輔 »

yama 様

素早い回答有り難うございます。
ご提示頂いた情報を参考にし、対策に取り組んでみます。
作業が完了したら改めてご報告いたします。
neran
メンバー
メンバー
記事: 22
登録日時: 2009年10月23日(金) 00:47

Re: リソースグループについてのご質問

投稿記事 by neran »

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にバインドすれば良さそうです。

コード: 全て選択

<?php
$success = $resource->joinGroup($resource->context_key); 
リソースの保存後、リソースを再度読み込み直さないと、
リソースグループへのチェックが表示に反映されないようです。

# RevoのAPI幾らか見慣れてきましたが、
# 命名がとっちらかってる感じです。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: リソースグループについてのご質問

投稿記事 by yama »

neran さんが書きました: リソースの保存後、リソースを再度読み込み直さないと、
リソースグループへのチェックが表示に反映されないようです。
if($success) $modx->cacheManager->refresh();
これでどうでしょう?(パラメータを何か与えないとコンテキスト関係なく全体をrefreshするかもしれませんが)
岩井裕輔
メンバー
メンバー
記事: 4
登録日時: 2012年8月27日(月) 21:00

Re: リソースグループについてのご質問

投稿記事 by 岩井裕輔 »

neran 様、yama 様

ご教示ありがとうございました。
お二人が提示してくださいましたコードを使用し、無事動作し、保存後すぐにチェックボックスのチェックも確認することが出来ました。

また、コンテキスト以下でリソースを作成する場合は問題ないのですが、
リソースツリー上部のボタン「新しいドキュメント」をクリックし、ドキュメントを作成するとコンテキストが 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;
}
※ユーザ毎に、オプションパラメータ「default_context」を設定し、その値を設定するようにしてあります。
 また、コンテキスト「web」は使用しない前提です

どうもありがとうございました。
neran
メンバー
メンバー
記事: 22
登録日時: 2009年10月23日(金) 00:47

Re: リソースグループについてのご質問

投稿記事 by neran »

yamaさん
yama さんが書きました: if($success) $modx->cacheManager->refresh();
これでどうでしょう?(パラメータを何か与えないとコンテキスト関係なく全体をrefreshするかもしれませんが)
んー、だめですね。保存後xhrでチェックボックスがリロードされてない感じなので、
当たるとしたらMODExt側なんでしょうか。

ちなみにrefresh()はこいつで、$providersにリフレッシュしたい要素を指定するみたいですね。
https://github.com/modxcms/revolution/b ... s.php#L532
試してないですが、リソースのリフレッシュはコンテキスト単位しかサポートしてない?


岩井さん
私もマルチコンテキストで複数サイト管理しているので、勉強になりました。
joinGroup(), leaveGroup()でリソースグループもう少し活用してみます。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: リソースグループについてのご質問

投稿記事 by yama »

そのまま気付かずリソース編集画面の更新ボタンをクリックすると、せっかくのリソース割り当てが外れて事故になっちゃいますね。
ヤッツケな対応ですが、今回はコンテキストごとに完全に独立したサイトを運用するということなので、編集画面ではリソースグループの選択を表示しないのがよいかも?
neran
メンバー
メンバー
記事: 22
登録日時: 2009年10月23日(金) 00:47

Re: リソースグループについてのご質問

投稿記事 by neran »

なるほど。プラグインで制御できるなら、制限ユーザーからは隠すべきですね。
formcustomization から modx-resource-access-permissions rigon の非表示、
管理者はユーザーグループで仕切る、で問題無さそうです。
岩井裕輔
メンバー
メンバー
記事: 4
登録日時: 2012年8月27日(月) 21:00

Re: リソースグループについてのご質問

投稿記事 by 岩井裕輔 »

neran さん
neran さんが書きました:んー、だめですね。保存後xhrでチェックボックスがリロードされてない感じなので、
こちらでは上手くチェックはいった状態になったのですが(ページ全体リロードという非常に効率の悪い方法で、ですが)

yama さん
yama さんが書きました:そのまま気付かずリソース編集画面の更新ボタンをクリックすると、せっかくのリソース割り当てが外れて事故になっちゃいますね。
ヤッツケな対応ですが、今回はコンテキストごとに完全に独立したサイトを運用するということなので、編集画面ではリソースグループの選択を表示しないのがよいかも?
こちらではその運用を行う予定です(現在はテストの為、表示させていましたが)



マルチコンテキストで、チャンクやテンプレートにも同様の仕様(カテゴリーに割り振る)を作れば
ほぼほぼこちらで想定していた運用ができそうです。
このあたりの機能をまとめれば、割りと簡単に一つの管理画面で複数のサイト編集者を管理できそうです。
(当トピックと話題としてはずれてしまいますが…)
返信する