2012年10月12日金曜日

Modx ユーザー別管理画面の編集関係。


ご無沙汰しています。

ここのところ、少々立て込んでいて放置していましたが、時間を見てまた再開します。

今日はModxの覚書です。

ユーザー管理関連で、色々と実験をしていたので、その内容の覚書です。

※2012/10/15 追記
この設定方法は、Modx1.0.6.-r6以降のバージョンにて行なってください。
r6以前のバージョンだとエラーが発生して、編集したコンテンツを保存できません。

別な方法により設置は可能でしょうが、今回の方法ではr6以前のバージョンでは対応致しません。
下記の方法を試される場合は、
必ずr6にバージョンUPした状態で、行なってください。



ユーザー管理から、ロール設定、グループ設定等を行うと、設定されたユーザー権限のページしか表示できない機能がある事はご存じかと思います。

しかし、フォルダの階層構造上、どうしても【権限が無い】あるいは【グループ制限なし(Public)】のページを表示しなければならない場合があります。

それは、編集させたいページの上位フォルダーとされるページです。

ロール設定では、フォルダ(コンテナ)に対し設定された管理権限が無いと、そのフォルダ内の物は全て表示されなくなります。(編集可能なコンテンツはありませんと表示されます)

このようなときに、そのフォルダは【グループ制限なし(Public)】※1状態にして、誰もが閲覧・編集可能な状態にするしか手段がありません。

しかし、そのページはユーザーに編集させたくない場合にどうしたらよいか……

と言う事で、どうしても表示されてしまうが、「編集させたくないページ」を

MODX管理画面でフォルダ(コンテナ)内だけを編集可能にする。

上記の方法で回避する事を試してみます。

しかし、この記事はあくまで
ManagerManager
をある程度使用した事がある。と言うことが前提で実際の使い方(コードの設置方法等)が今一つ……

なので、このコードの設置のしかたを書いておきます。
(私もあまり使った事が無いので、完全に自己流です)


メインのコードはmm.inc.php

上記のメインになるコードは、

/plugins/managermanager/mm.inc.php

に書き込み。

mm.inc.phpを開き、最終行以下に、下記コードをペースト。

// テンプレートID指定でアクセス不可を設定する関数
if (! function_exists("mm_deny_templates")) {
function mm_deny_templates($role_users, $tpl, $denied_message) {
global $mm_current_page;
$templates = makeArray($tpl);
if (in_array($mm_current_page['template'], $templates)) {
$docid = (int)$_GET[id];
mm_widget_accessdenied($docid, $denied_message, $role_users);
}
}
}


この時に、サイトに書いてある最後の変数に関しては、記述しない事。

//////// この部分は記述しない ///////////////
$role = '!1'; // 管理者(ロールID:1)以外のユーザに対して
$tpl = '1,2'; // テンプレートIDが1,2の場合、ユーザは編集不可にする。
$msg = 'このフォルダ自体は編集できません。子リソースを作成・編集して下さい。';
mm_deny_templates($role, $tpl, $msg);


これを書いてしまうと、ページを表示したときにエラーコードが表示されるので、注意が必要。


後は、実際の命令文を、

エレメント管理>チャンク>mm_rules

に記述する。
記述位置は、3行目以降で、

/* =============

とコメントアウトしている前。

書き込み例

mm_widget_showimagetvs(); // Imageタイプのテンプレート変数の画像をプレビューします
if($modx->config['track_visitors']==='0') mm_hideFields('log');

//// ここから下 /////

mm_deny_templates('3', '4', 'このフォルダ自体は編集できません。子リソースを作成・編集して下さい。');


//// ここより上 /////

/* ==========================================================

と言った感じ。


書き込む書式は、下記のようにすれはOK。

mm_deny_templates('3', '4', 'このフォルダ自体は編集できません。子リソースを作成・編集して下さい。');

解説
上記の書式は、管理者ID3番は、テンプレートID4番の場合、編集出来ないようにする。
編集出来ない画面には「このフォルダ自体は編集できません。子リソースを作成・編集して下さい。」と表示しなさい。

と言った内容。

少し解りにくいかと思うので、もう少し柔らかく。
要するに、

ID3番のユーザーは、テンプレート4番以外のぺーじは編集できます。

と言う事です。


この方法は、はっきり言って自己流です。

でも、問題無く動いているで、とりあえずOKと言う事で。
もう少しスマートな方法があれば、コメントをください。



※1
必ずしも【グループ制限なし(Public)】である必要はありません。
この階層以下を編集するユーザーが関連した、他の管理ロールでも問題ありません。






神奈川県を中心として主に横浜・川崎・東京23区西部の中小企業・個人事業主向けホームページを制作しております。 横浜本田WEB


横浜本田WEB Facebookページ
http://www.facebook.com/hondaweb?fref=ts

  • このエントリーをはてなブックマークに追加


Facebookへ投稿