« 2008年12月 | メイン | 2009年2月 »

2009年1月 アーカイブ

2009年1月14日

管理画面で使わないメニュー項目を非表示にする

Windows関係のネタは一旦お休みしてMovable Typeの管理画面カスタマイズの小ネタを書いていこうと思います。

Movable Type を用いた案件などで、まれに「使えないメニュー項目を表示しないでほしい」という要望を聞くことかあるのですが、実は、これには簡単な解決方法があります。
公式なドキュメントには書かれていないのですが、Movable Type 4.1以降には「HideDisabledMenus」という環境変数が追加されています。この値を 1 にすることで、通常グレーアウトされるメニュー項目が非表示になります。
設定はmt-config.cgiに次の1行を挿入します。

HideDisabledMenus 1

デフォルトは 0 ですので、設定しない限り非表示にはなりません。
また、この設定はアンドキュメント(?)ですので自己責任でお使いください。

さて、この設定で非表示になるメニュー項目は、「使えない」メニュー項目なのですが、これはアクセスしているユーザーに付与された権限によって、判断されています。
ユーザーが「使わない」メニュー項目を非表示にしたい場合には、そのユーザーの権限を「使えない」と判断される権限に変更する必要があります。

例えば、「ウェブページの管理(「一覧」→「ウェブページ」)」のメニュー項目(manage:page)は、「ウェブページの管理(manage_pages)」権限がないユーザーには使えませんので、この項目を非表示にするためにはユーザーが 「ウェブページの管理(manage_pages)」権限を持たない状態に設定しなければなりません。
また、ユーザーに付与される権限は、複数の権限を組み合わせた「ロール」で管理されており、このロールを作成・編集し、適切に割り当てることで、ユーザーが持つ権限をカスタマイズすることになります。

しかし、この段階的な権限設定はユーザー管理を徹底したいサイトでは便利な機能ですが、その反面設定の手数が多くなってしまい、熟知していないと設定ミスの原因にもなりかねません。

そこでこういったメニューへの要望をプラグインで実現する方法を紹介したいと思います。

よくあるメニューへの要望として

  • 「ウェブページは使わないからメニューに出さないでほしい」
  • 「トラックバック、コメントは使わないからブログ管理者だけ見えればいい」
  • 「システム情報はシステム管理者だけ見えるようにしたい」
こういった感じのものがよくありそうな気がするので、これで例となる簡単なプラグインを書いてみたいと思います。

今回は次の機能を実現します。

  1. HideDisabledMenusをデフォルトで有効にする。
  2. ウェブページ関連のメニュー項目を非表示ににする。
  3. トラックバック・コメントのメニュー項目はブログ管理者・システム管理者にのみ表示する。
  4. システム情報のメニューをシステム管理者以外に非表示ににする。

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 を使うことでより簡単に作成可能です。
ぜひお試しください。

お問い合わせ

エムロジック株式会社ではMovable Typeによるサイト構築やプラグイン開発、iPhone・Windows等のアプリケーション開発業務を行っています。
お問い合わせはこちらまで。

2009年1月28日

Vista上のXAMPP1.7.0のセキュリティ画面での403エラーを回避する方法

WindowsマシンにXAMPPをインストールしてローカルサーバ環境をつくり、その上でMTを使ってサイト構築をしたり、プラグインのテストをしたりという方法は非常にポピュラーになってきています。

先日、僕も手持ちのMac mini上のVistaにXAMPPをインストールして、いざ! ローカルサーバ環境構築! と意気込んでみたのですが、インストールが終わりセキュリティの設定をしようというところで、タイトルのエラーにぶち当たりました。

何か情報がないかとGoogleで検索してやっと、このページを見つけました。

Apache Friends Forum • View topic - Xampp 1.7 security 403 error on vista

まさに、今、僕が直面している状況です。
読んでみると、

On Vista there is often an issue with localhost because of an IPv6 entry in the Windows HOSTS file that may be blocking your access to localhost.

とのこと......。
解決策も、このスレッドにありました。

In other words, the correct steps are:
1) open the file "\xampp\apache\conf\extra\httpd-xampp.conf" in a texteditor
2) replace "Allow from localhost" with "Allow from 127.0.0.1" (2 times)
3) save the file
4) restart Apache

この修正でなんとか動くようになりました。
日本語にすると

  1. c:\xampp\apache\conf\extra\httpd-xampp.confファイルをテキストエディタで開きます
  2. 2箇所ある「Allow from localhost」を「Allow from 127.0.0.1」に修正します
  3. ファイルを保存します
  4. Apacheを再起動します

こんな感じになります。

結構はまりそうなところだと思うので、ここにメモしておきます。