Windows関係のネタは一旦お休みしてMovable Typeの管理画面カスタマイズの小ネタを書いていこうと思います。
Movable Type を用いた案件などで、まれに「使えないメニュー項目を表示しないでほしい」という要望を聞くことかあるのですが、実は、これには簡単な解決方法があります。
公式なドキュメントには書かれていないのですが、Movable Type 4.1以降には「HideDisabledMenus」という環境変数が追加されています。この値を 1 にすることで、通常グレーアウトされるメニュー項目が非表示になります。
設定はmt-config.cgiに次の1行を挿入します。
HideDisabledMenus 1
デフォルトは 0 ですので、設定しない限り非表示にはなりません。
また、この設定はアンドキュメント(?)ですので自己責任でお使いください。
さて、この設定で非表示になるメニュー項目は、「使えない」メニュー項目なのですが、これはアクセスしているユーザーに付与された権限によって、判断されています。
ユーザーが「使わない」メニュー項目を非表示にしたい場合には、そのユーザーの権限を「使えない」と判断される権限に変更する必要があります。
例えば、「ウェブページの管理(「一覧」→「ウェブページ」)」のメニュー項目(manage:page)は、「ウェブページの管理(manage_pages)」権限がないユーザーには使えませんので、この項目を非表示にするためにはユーザーが 「ウェブページの管理(manage_pages)」権限を持たない状態に設定しなければなりません。
また、ユーザーに付与される権限は、複数の権限を組み合わせた「ロール」で管理されており、このロールを作成・編集し、適切に割り当てることで、ユーザーが持つ権限をカスタマイズすることになります。
しかし、この段階的な権限設定はユーザー管理を徹底したいサイトでは便利な機能ですが、その反面設定の手数が多くなってしまい、熟知していないと設定ミスの原因にもなりかねません。
そこでこういったメニューへの要望をプラグインで実現する方法を紹介したいと思います。
よくあるメニューへの要望として
- 「ウェブページは使わないからメニューに出さないでほしい」
- 「トラックバック、コメントは使わないからブログ管理者だけ見えればいい」
- 「システム情報はシステム管理者だけ見えるようにしたい」
今回は次の機能を実現します。
- HideDisabledMenusをデフォルトで有効にする。
- ウェブページ関連のメニュー項目を非表示ににする。
- トラックバック・コメントのメニュー項目はブログ管理者・システム管理者にのみ表示する。
- システム情報のメニューをシステム管理者以外に非表示ににする。
Movable Typeの plugins フォルダに任意のフォルダを作成して、次のコードを config.yaml というファイル名で保存してください。
わずか22行のプラグインで、これだけの実現が可能です。
name: SimplifyMenus id: SimplifyMenus applications: cms: menus: create:page: condition: sub { 0; } manage:page: condition: sub { 0; } manage:folder: condition: sub { 0; } manage:ping: permission: administer_blog manage:comment: permission: administer_blog tools:system_information: condition: >> sub { MT->instance->user->is_superuser; } config_settings: HideDisabledMenus: default: 1
このプラグインで注意すべき点は、機能そのものは制限していませんので、厳密に機能の実行を制限したい場合には、メニューから呼び出されるメソッドを制限する必要があります。
またアンドキュメントな設定を利用していることにも注意してください。
簡単にコードの解説を行います。
create:page: condition: sub { 0; } manage:page: condition: sub { 0; } manage:folder: condition: sub { 0; }
ここでウェブページ関係のメニュー項目3つ(「新規作成」→「ウェブページ」、「一覧」→「ウェブページ」、「一覧」→「フォルダ」)を無条件で非表示にしています。
manage:ping: permission: administer_blog manage:comment: permission: administer_blog
ここでトラックバックとコメントのメニュー項目(「一覧」→「トラックバック」、「一覧」→「コメント」)をブログ管理者(システム管理者を含む)以外で、グレーアウトにしています。
HideDisabledMenusの設定を含めると非表示になります。
tools:system_information: condition: >> sub { MT->instance->user->is_superuser; }
ここで「システム情報」のメニュー項目(システムメニューの「ツール」→「システム情報」)をシステム管理者以外で非表示としています。
config_settings: HideDisabledMenus: default: 1
ここで 環境変数「HideDisabledMenus」のデフォルト値を 1 にしています。
そのためこのプラグインを利用する場合には、使えないメニュー項目をグレーアウトさせるために、「HideDisabledMenus」を無効にする設定を mt-config.cgi に記述する必要があります。
「使えない」メニュー項目が表示されているのはもちろんですが、「使わない」メニュー項目が表示されていると、「とっつきづらい」イメージをもってしまう方もいらっしゃるかと思います。
Movable Type 4ではレジストリを設定・変更するだけで、いろいろなカスタマイズが可能になっており、このレジストリを設定・変更するプラグインは、config.yaml を使うことでより簡単に作成可能です。
ぜひお試しください。
コメント (7)
こちらのプラグインを使用させて頂きました。
管理面から非常に有効なプラグインであり、感謝しております。
まとまったユーザー数でのライセンス購入を検討しており、現在テストを
おこなっているのですが、ユーザー管理の部分で要望があがっております。
サインイン後の右上方 こんにちはxxxxxさん あるいは ユーザー情報の編集
をクリックして表示される ユーザー情報の編集 画面よりどのユーザーでも
自身のユーザー情報が変更できる仕様になっているかと思います。
ユーザー名 と 表示する名前 についてはシステム管理者以外は変更できない
ようなプラグインがあるのですが、電子メール の部分を一般ユーザーには表示
させないような要望があります。
この記事で紹介されているプラグインのように、システム管理者以外はこの
電子メール の部分をまったく表示させないようにすることは可能でしょうか。
紹介されているプラグインの以下の記述があると思います。
tools:system_information:
condition: >>
sub { MT->instance->user->is_superuser; }
個々のユーザーの 電子メール を表示する部分につきましてこの方法を採用で
きればと考えておりますが、可能でしょうか。
可能であれば、その方法についてご教授頂ければと考えておりますが、有償
での対応となるでしょうか。
なお、Enterprise 版での使用は現在は考慮しておらず、通常版の複数ユーザ
での使用を検討しております。
(テストで確認しているのは Movable Type 4.23 日本語版です)
よろしくご検討の程、お願い致します。
Posted by: sakitama_a | 2009年3月17日 16:13
sakitama_aさん
ユーザー情報の編集画面にある電子メールの部分は、メニュー項目ではありませんので、非表示にする場合、また別の方法での対応となります。
また、ユーザー情報の更新時に電子メールアドレスが含まれないとエラーにされてしまいますので、何らかの方法で電子メールアドレスを受け渡し、エラーを回避する必要がでてくるのではないかと思います。
ぱっと答えられる範囲ですが、ご参考になれば幸いです。
もし本格的な対応をご検討であれば、こちらからご相談ください。
Posted by: tajima | 2009年3月18日 16:53
tajimaさま
お忙しいところ早々にご回答頂きありがとうございます。
検討をおこない、対応をお願いする場合は改めて連絡させて頂き
たいと思います。
ご対応ありがとうございました。
Posted by: sakitama_a | 2009年3月19日 09:20
こちらのプラグインを使用させていただこうと思っています。
アップロード後、MTの管理画面へのアクセスができなくなってしまう症状が起こっているのですが、使用方法がまちがっておりますでしょうか?
Got an error: Error reading xxxxx/xxxx/xxx/xx/plugins/hidden/config.yaml: Stream does not end with newline character (YAML_PARSE_ERR_
Posted by: けんと | 2009年8月12日 10:42
自己解決いたしました。
どうも失礼しました。
Posted by: けんと | 2009年8月12日 10:57
さらにユーザビリティをあげるためにシステムメニューごとに表示したいのですが、今ではシステムメニューにブログだけ表示され、ブログをクリックすると、各ブログ一覧などが表示され、システムメニュー画面にアクセスできてしまいます。
テンプレートの初期化などはできないようですが、表示されるとややこしいので、非表示などにしておきたいのですが、この設定に追記すれば可能でしょうか?
Posted by: カンタ | 2009年12月14日 15:53
■訂正
さらにユーザビリティをあげるためにシステムメニューごとに表示したい(×)
さらにユーザビリティをあげるためにシステムメニューごと非表示したい(○)
です。
Posted by: カンタ | 2009年12月14日 15:57