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

  • 投稿日:
  • by
  • カテゴリ:

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