Mediawiki に非公開ページを設定

      2016/03/08

先日の方針を受けて MediaWiki にコードスニペットを投入し始めました。Wiki の全文検索でタイトルやコードからも検索できるようになるのは便利です。

基本的に公開されているヘルプやフォーラムのコードをまとめたものなので公開には問題ないですが、一部は自分だけ参照可に限定したいものもあります。このサイトの場合、

  • 内容は基本すべて公開
  • 一部のページだけ非公開

としたいので、指定したページだけ非公開にできれば良いのです。Wordpress だと標準でページごとに公開範囲が設定設定できますが、MediaWiki の標準機能にはそんなものは用意されてません。

限定公開に関する方法から Lockdown エクステンションを使用することにしました。このエクステンションは LocalSettings.php に設定した特定ページや名前空間に対して、読み込みや編集の権限を設定します。なので頻繁に設定自体は変更できません。そこで、今回はカスタム名前空間を定義して特定の名前空間は sysop(管理)ログイン ユーザーしか参照できないようにしました。

名前空間とはカテゴリとは別にあるページのグルーピングです。以下を設定して非公開用カスタム名前空間を定義します。

define("NS_PRIVATE", 3000); # NS_PRIVATE を ID 3000 として設定
$wgExtraNamespaces[NS_PRIVATE] = "非公開"; # NS_PRIVATE を "非公開" という名前で定義

次に Lockdown エクステンションをダウンロードして設置し、以下を LocalSettings.php に記述します。

require_once("$IP/extensions/Lockdown/Lockdown.php");
$wgSpecialPageLockdown['Export'] = array('sysop'); #特定ページへのアクセス制限
$wgNamespacePermissionLockdown[NS_PRIVATE]['read'] = array('sysop'); # 特定名前空間を制限 P はカスタム名前空間名
$wgNamespacePermissionLockdown[NS_TALK]['read'] = array('sysop'); # 議論(トーク)ページを非公開

試しに名前空間付きページを作成してアクセスします。ログインしてると内容が表示されています。

非公開ページ(ログイン時)

非公開ページ(ログイン時)

ログアウトしてアクセスすると、ログインを要求してきます。ページが存在しない場合のエラーとは異なるのでちゃんと動いているようです。

非公開ページ(ログアウト時)

非公開ページ(ログアウト時)

ひとまず機械的にスニペットを投入していきます。現在 20 / 540 完了で先は長い。

トーク(NS_TALK)名前空間も非公開にすることで、ページは公開しつつ議論に書いた情報だけを非公開にすることができます。

公開ページ

公開ページ

非公開ページ

非公開ページ

 - Web ,