ご無沙汰しています。
ここのところ、少々立て込んでいて放置していましたが、時間を見てまた再開します。
今日は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