AccessControl+

目次

はじめに

AccessControl+プラグインは、ブログに閲覧制限の機能を追加するプラグインです。

プラグインについて

機能

  • プラグインの設定を行い再構築することでブログに閲覧制限の機能を追加することができます。
  • ビルドされる拡張子htm、html、phpのファイルにPHPで記述された閲覧制限コードが挿入されます。
  • サインインしたユーザーの認証方式と権限がプラグインの設定に含まれた場合に閲覧が許可されます。
  • mt-search.cgiならびにData API(MT6.xのみ)を利用した検索において閲覧可能なブログ/ウェブサイトのみの検索に制限されます。
  • プラグインが提供するタグはPHPのコードに展開され、サインインしたユーザーに応じた動的な値を出力します。
  • スタティックパブリッシング/ダイナミックパブリッシングの両方に対応します。
  • (実験的機能)ブログ記事アーカイブ・ウェブページアーカイブに限定して個別に閲覧制限の有無を設定することが可能です。

対応バージョン

  • Movable Type 5.2x
  • Movable Type 6.x

動作条件

  • Movable Type コミュニティ・ソリューション(Movable Typeに標準添付されています)
  • スタティックパブリッシングのみを利用する場合でも、あらかじめダイナミックパブリッシングが動作する環境(PHP5.0以上)が必要となります。
  • Movable Typeが出力する拡張子htm、html、phpのファイルが、PHPで処理されるようWebサーバーの設定を行っていただく必要があります。

インストール

本パッケージに含まれる「plugins」ディレクトリ内のディレクトリ「AccessControl」を、Movable Typeインストールディレクトリの「plugins」ディレクトリの下にコピーしてください。
次に、本パッケージに含まれる「mt-static/plugins」ディレクトリ内の「AccessControl」ディレクトリを、スタティック・ディレクトリ(環境設定ファイルmt-config.cgiにおいて「StaticWebPath」として指定したディレクトリ)の「plugins」ディレクトリの下にコピーしてください。
結果、次のような構成になります。

mt (Movable Type インストールディレクトリ)
`-- plugins
    `-- AccessControl
        |-- lib
        |   `-- AccessControl
        |       |-- L10N
        |       |   |-- en_us.pm
        |       |   `-- ja.pm
        |       |-- ContextHandlers.pm
        |       |-- L10N.pm
        |       `-- Plugin.pm
        |-- php
        |   |-- accesscontrol.php
        |   |-- block.mtaccesscontrolifauthed.php
        |   |-- function.mtaccesscontrolsignouturl.php
        |   |-- function.mtaccesscontroluserpermission.php
        |   |-- init.accesscontrol.php
        |   `-- resource.mtml.php
        |-- tmpl
        |   |-- blog_config_template.tmpl
        |   |-- downloader.tmpl
        |   |-- htaccess.tmpl
        |   |-- redirector.tmpl
        |   `-- system_config_template.tmpl
        `-- mt-accesscontrol.pl
mt-static (スタティック・ディレクトリ)
`-- plugins
    `-- AccessControl
        `-- docs
            |-- accesscontrol.html
            `-- mtdocs.css

作業後、Movable Typeのプラグイン設定画面を表示し、プラグインの一覧に「AccessControl+」が表示されていることを確認してください。これでインストール完了です。

システム設定

プラグインが使用するテンプレートについて

accesscontrolplus_template.png

ブログ/ウェブサイトのプラグイン設定画面より、当プラグインが用いるテンプレートを作成することが可能です。ブログの閲覧制限を使用する場合には、必ずテンプレートを作成し、インデックステンプレートのビルドを行いこれらのファイルを出力するようにしてください。

ファイルダウンロードの制限について

ウェブサーバーにApacheを使用している場合、mod_rewriteモジュールの機能を利用することで、閲覧制限されているブログ/ウェブサイトの画像やドキュメントなどファイルのダウンロードを制限することが可能です。
なお、Movable Type クラウド版、Movable Type for AWSにおいてはウェブサーバーはnginxですが、この機能をご利用いただけます。

インデックテンプレート「AccessControl htaccess」を編集することで、閲覧制限対象とするファイルのカスタマイズが可能です。
テンプレートの中でカスタマイズする部分は次の部分になります。

RewriteEngine on<br />
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(html|php|js)$ [NC]
RewriteRule ^.*$ <mt:BlogRelativeURL /><mt:AccessControlDownloaderScript /> [L]

制限をかけるファイルの種別(拡張子)を変更したい場合には、4行目の拡張子の指定を変更してください。

mod_rewriteモジュールの設定次第では、拡張子以外にも、特定のファイル名や特定のディレクトリ名で制限をかけたりなどの複雑な条件を設定することも可能です。詳しくはApacheならびにmod_rewriteモジュールのドキュメントを参照してください。

プラグインの設定(システム)

accesscontrolplus_syspref.png
閲覧制限
システム全体の閲覧制限の切り替えを行います。
設定値
利用不可
システム全体の閲覧制限を行いません。
利用可能
システム全体で閲覧制限を行います。
デフォルト
利用不可
閲覧不可時に表示するURL
ユーザーが閲覧不可と判定された場合に表示するURLを指定します。
設定値
閲覧不可時に表示するURL
未入力時にはMovable Type標準のサインインページが使われます。
デフォルト
未入力
権限
サインインにMT認証を利用した場合に、閲覧を可能とする権限を指定します。権限は複数指定することができます。
ここで指定した権限とユーザーの持つ権限に1つでも一致する権限があればアクセスが許可されます。
設定値
閲覧を許可する権限を指定します。一般的な権限については「権限について」をご参照ください。
未入力時にはシステムに有効なアカウントがあればアクセスが許可されます。
デフォルト
未入力
コンテンツタイプ
ダウンロードスクリプトを用いてブログ/ウェブサイト内のファイルを配信する際、ウェブブラウザに引き渡すMIMEタイプの設定を行います。
設定値
拡張子別のMIMEタイプを記述します。1つの拡張子ごとに1行で記述します。
[拡張子]:[MIMEタイプ]
該当しない拡張子のファイルは application/octet-stream として扱われます。
デフォルト
未入力
権限確認方式
Movable Typeの環境変数SingleCommunityを有効にして運用している場合に、システムの権限だけでなくアクセスしようとしたブログの権限も確認するかの設定を行います。
SingleCommunityを有効にするとシステム共通のCookieを利用して認証が行われるようになりますので、システム共通の認証を行いつつ、ブログごとにユーザーに付与した権限に応じた閲覧制限を実施したい場合に使用します。
設定値
チェックするとSingleCommunity有効時にシステム権限の他にアクセスしようとしたブログの権限も確認する機能が有効となります。
デフォルト
無効(チェックなし)

プラグインの設定(ウェブサイト)

accesscontrolplus_websitepref.png
閲覧制限
ウェブサイトの閲覧制限の切り替えを行います。
設定値
システムプラグイン設定に従う
システムプラグイン設定に従います。
利用不可
このウェブサイトの閲覧制限を行いません。
利用可能
このウェブサイトの閲覧制限を行います。
個別
記事/ウェブページごとに閲覧制限を設定します。
デフォルト
システムプラグイン設定に従います。
リダイレクタスクリプト
Movable Typeによる認証後のリダイレクト先となるスクリプトのファイル名を指定します。
設定値
スクリプトのファイル名を指定します。ディレクトリ名は含めないようにしてください。
デフォルト
acrd.php
サインアウト後に表示するURL
サインアウト後に表示するURLを指定します。
サインアウトはMTAccessControlSignOutURLタグが出力するURLを用いて行う必要があります。
設定値
サインアウト後に表示するURL
未入力時にはウェブサイトのサイトURLが使用されますが、結果的にサインインページに遷移します。
デフォルト
未入力
ダウンロードスクリプト
ファイルダウンロードを制限するスクリプトのファイル名を指定します。
設定値
スクリプトのファイル名を指定します。ディレクトリ名は含めないようにしてください。
デフォルト
acdl.php
閲覧不可時に表示するURL
権限
コンテンツタイプ
権限確認方式
システムプラグイン設定での項目と同じ内容です。ウェブサイトの設定はこちらが優先されます。省略時にはシステムプラグイン設定の値が使用されます。

プラグインの設定(ブログ)

accesscontrolplus_blogpref.png
閲覧制限
ブログの閲覧制限の切り替えを行います。
設定値
ウェブサイトのプラグイン設定に従う
ウェブサイトのプラグイン設定に従います。
利用不可
このブログの閲覧制限を行いません。
利用可能
このブログの閲覧制限を行います。
個別
記事/ウェブページごとに閲覧制限を設定します。
デフォルト
ウェブサイトのプラグイン設定に従います。
リダイレクタスクリプト
閲覧不可時に表示するURL
サインアウト後に表示するURL
権限
権限確認方式
ダウンロードスクリプト
コンテンツタイプ
システム/ウェブサイトのプラグイン設定での項目と同じ内容です。ブログの設定はこちらが優先されます。省略時にはウェブサイトのプラグイン設定の値が使用されます。

タグの一覧

MTAccessControlSignOutURL
サインアウト処理を行うURLを出力するファンクションタグです。
MTAccessControlUserPermission
閲覧中のユーザーがMovable Type認証を利用した場合に、ユーザーの権限を出力するファンクションタグです。
複数の権限はカンマ区切りで出力されます。
Movable Type認証以外の認証方法を利用した場合には、何も出力しません。
MTAccessControlIfAuthed
閲覧中のユーザーが閲覧可能ユーザーである場合に処理を行うブロックタグです。このタグで囲まれた範囲は動的に処理されます。
MTAccessControlIfBlogAccessible
閲覧中のユーザーが指定されたウェブサイト/ブログを閲覧可能である場合に処理を行うブロックタグです。
なお、プラグイン設定において閲覧制限設定を「個別」としたウェブサイト/ブログについては個別記事の閲覧制限状況に関わらず閲覧可能として扱われます。

これらのタグは、閲覧制限が無効であった場合や閲覧制限の対象とならないファイルで利用した場合には、何も出力しません。

グローバルモディファイアの利用

AccessControl+プラグインが提供しているファンクションタグには、Movable Typeが標準で提供しているグローバルモディファイアを利用することができます。
利用できるグローバルモディファイアは次の通りです。

filters
trim_to
trim
ltrim
rtrim
decode_html
decode_xml
remove_html
dirify
sanitize
encode_html
encode_xml
encode_js
encode_php
encode_url
upper_case
lower_case
strip_linefeeds
space_pad
zero_pad
sprintf
                    

動的なテンプレート処理

AccessControl+プラグインでは、MTAccessControlIfAuthed タグの内部のテンプレートを動的に処理することで、閲覧中のユーザーに固有の動的な出力を行うことが可能です。
テンプレートタグについては、ダイナミックパブリッシング対応のタグを使用してください。
スタティックパブリッシングでは、MTAccessControlIfAuthed タグの前後のテンプレートの処理状態(コンテキスト)が反映されませんのでご注意ください。
MTAccessControlIfAuthed タグ内部では「登録ユーザー」「アクセスしているブログ」に関連するタグを使用することができます

MTAccessControlIfAuthedタグを使用した例

<mt:AccessControlIfAuthed><mt:AuthorName setvar="aname" />
 <h1>ようこそ <mt:AuthorDisplayName> さん</h1>
 <h2>あなたの最近のブログ記事</h2>
 <mt:Entries author="$aname" lastn="3">
  <mt:if name="__first__"><ul></mt:if>
  <li><a href="<mt:EntryPermalink />"><mt:EntryTitle endode_html="1" /></a><br /><mt:EntryExcerpt endode_html="1" /></li>
  <mt:if name="__last__"></ul></mt:if>
 <mt:Else>
  <p>ブログ記事を公開していません</p>
 </mt:Entries>
 <h2>あなたの最近のウェブページ</h2>
 <mt:Pages author="$aname" lastn="3">
  <mt:if name="__first__"><ul></mt:if>
  <li><a href="<mt:PagePermalink />"><mt:PageTitle endode_html="1" /></a><br /><mt:PageExcerpt endode_html="1" /></li>
  <mt:if name="__last__"></ul></mt:if>
 <mt:Else>
  <p>ウェブページを公開していません</p>
 </mt:Pages>
<mt:Else>
 <h1>ようこそ ゲスト さん</h1>
</mt:AccessControlIfAuthed>

MTAccessControlタグを使用した例

<h1>ウェブサイト一覧</h1>
<ul>
<mt:AccessControl>
<mt:Websites>
  <mt:AccessControlIfBlogAccessible>
    <li><a href="<mt:WebsiteURL />"><mt:WebsiteName escape="html"></a></li>
  </mt:AccessControlIfBlogAccessible>
</mt:Websites>
</mt:AccessControl>
</ul>

注意事項

権限について

AccessControl+の設定で指定する権限は、認証方式と同じくMovable Type内部で利用されている形式で記述する必要があります。
Movable Type に標準で組み込まれている権限と、その記述方法は次の通りです。

ブログの権限(管理)
権限の名称 設定での記述
ブログ管理者 administer_blog
ブログの設定/設定の変更 edit_config
公開パスの設定 set_publish_paths
カテゴリの管理 edit_categories
タグの管理 edit_tags
ログの閲覧 view_blog_log
ウェブサイトと所属ブログの管理 ※ manage_member_blogs
ウェブサイトの管理 ※ administer_website
ユーザーの管理 ※ manage_users
アドレス帳の管理 ※ edit_notifications
ブログの権限(作成と公開)
権限の名称 設定での記述
ブログ記事の作成/記事の作成 create_post
ブログ記事の公開/記事の公開 publish_post
通知の送信 send_notifications
すべてのブログ記事の編集 edit_all_posts
ウェブページの管理 manage_pages
ブログの再構築/サイトを再構築 rebuild
ブログの権限(デザインする)
権限の名称 設定での記述
テンプレートの管理 edit_templates
テーマの管理 ※ manage_themes
ブログの権限(アイテム)
権限の名称 設定での記述
アイテムの管理 edit_assets
ファイルアップロード upload
画像に関する既定値の設定 save_image_defaults
ブログの権限(コメント投稿)
権限の名称 設定での記述
コメントの送信/コメントの投稿 comment
コメント/トラックバックの管理 manage_feedback

権限は追加することができるため、現在お使いのシステムで利用可能な権限は、ロールの編集(MT5/MT6)画面からブログ権限をご確認ください。

制限事項

登録 / 認証設定(MT5/MT6)においてユーザー登録を許可していない場合、サインイン方式の設定に関わらず、Movable Type認証を用いたサインインでコメント権限(comment)を持たないユーザーには「権限がありません。」というメッセージを表示して、サインインが失敗します。
この場合、コメント権限を持たないユーザーはサインイン画面に戻り、閲覧不可時に表示するURLは表示されません。
デフォルトでは閲覧不可時に表示するURLがサインイン画面になっているため違いはありませんが、閲覧不可時に表示するURLを用意する場合にはご注意ください。

個別モードについて

個別モードでは、指定したブログの全ページに対して認証チェックコードを追加した上で、ブログ記事・ウェブページ個別に保存される閲覧制限設定に従って閲覧制限を行います。
インデックステンプレートや、ブログ記事リストアーカイブでは閲覧制限は行われませんのでご注意ください。
なお、閲覧制限が実施されない場合でも MTAccessControlIfAuthed タグを用いることにより、閲覧可能ユーザー・不可ユーザーごとに表示するコンテンツを切り替えることが可能です。

Data APIについて

Movable Type 6においてData APIが実装されましたが、当プラグインでは、バージョン1.05より制限付きで対応しています。
現状では当プラグインにおいてβ版相当の対応となっておりますので、対応内容につきましては今後変更を行う可能性があります。ご注意ください。
対応メソッドは次の通りです。(Movable Type 6が提供しているメソッドの一覧はリファレンスをご参照ください)

ブログ(Blogs)
メソッド 閲覧制限有効時 個別モード時
listByUser 指定ユーザーが権限を保有するブログのリストではなく、閲覧可能なブログのリストを返します
(変更検討中)
get 認証ユーザーがブログを表示できる場合データを返します
表示できない場合はエラー(403)になります
データを返します(無効時と同等)
コメント(Comments)
メソッド 閲覧制限有効時 個別モード時
listByEntries
list
get
エントリ(Entries)
メソッド 閲覧制限有効時 個別モード時
list
get
トラックバック(Trackbacks)
メソッド 閲覧制限有効時 個別モード時
listByEntries
list
get

Data APIにおける制限事項

現状のData APIではauthenticationメソッドにおいて、コメントユーザーの認証を行うことができないため、コメントユーザーとしてAPIを利用することができません。
DData APIを用いた会員サービス等を構築される場合は、管理画面にログイン可能なユーザーを作成し「コメント投稿者」以外の権限を用いて構築するようにしてください。

Movable Typeクラウド版における制限事項

現状のMovable Type クラウド版では、このプラグインのダウンロード制限機能が正しく動作しません。

Movable Type for AWS における制限事項

現状のMovable Type for AWS nginx版では、このプラグインのダウンロード制限機能が正しく動作しません。
Movable Type for AWS Apache版をお使いください。

更新履歴

  • [2017-12-08:v2.0.3b1]
    • Movable Type 6.3.3でのダイナミックパブリッシングの変更に対応した
    • プラグインが使用するテンプレートを複数生成できてしまう問題の修正
    • MTAccessControl/MTAccessControlIfAuthed タグでのダイナミックパブリッシングにおいてregex_replaceモディファイアが動作しなかった問題の修正
    • MTAccessControl/MTAccessControlIfAuthed タグにstaticモディファイアを実装した
  • [2016-12-05:v2.0.1b2]
    • Movable Type 6.3で採用されたSmarty3に対応した
    • MTAccessControlタグ、MTAccessControlIfBlogAccessibleタグを追加した
  • [2016-08-05:v2.0.1b1]
    • 検索制限の処理においてLDAP認証のユーザーの権限が扱われなかった問題の修正
    • 検索制限の処理においてアクセス可能なブログが存在しない場合にエラーが発生していた問題の修正
    • HTMLの拡張子としてshtmlもアクセス制限対象にするようにした
  • [2015-02-24:v2.0b1]
    • コミュニティソリューションのトークンを用いた認証方式に対応し、これまでの認証方式を廃止した
    • Movable Typeクラウド版などのmod_rewrite相当のリライト処理を持った環境にてダウンロード制限が動作するようにした
    • MTAccessControlIfAuthedタグの動作を変更し、タグの範囲をダイナミックに処理するようにした
  • [2014-01-24:v1.05]
    • Data APIに制限付きで対応した
  • [2013-10-15:v1.04]
    • MT6.0に対応した
    • PluginPathを別途指定している環境においてphpファイルのパスを間違えてしまう問題の修正
  • [2012-04-08:v1.03]
    • なりすましを可能とする脆弱性の修正
      (本バージョンの適用によりMovable Type本体の脆弱性を修正するものではありません)
    • LDAP認証で認証が失敗する問題の修正
    • 不要なエラーログを出力する問題の修正
    • MT4.3に対応した
  • [2011-05-27:v1.02]
    • MT5.1に対応した
    • 個別モード時にウェブページの閲覧制限が動作しない問題の修正
    • MT4.2xのダイナミックパブリッシングでの使用時にエラーが発生する問題の修正
  • [2010-09-02:v1.01]
    • 権限確認方式を設定できるようにした
    • 実験的な機能として個別モードを追加
    • 個別モード時に利用できるMTAccessControlIfAuthedタグの提供
  • [2010-04-30:v1.00]
    • 最初のリリース

このプラグインの利用及び著作権について

このプラグインの著作権は作者であるエムロジック株式会社 / M-Logic, Inc.が所有しています。著作権者の許可なく本プラグインを使用、改変、再配布することはできません。