AutoRoleの利用 [Plone3.3]

AutoRole を利用することで、特定の IP からのみのアクセスを許可することができる。あるユーザ(Anonymous含)のアクセス元 IP に応じて、そのユーザにロールを付与する仕組みになっている。ワークフローのある状態を、アクセス元 IP に応じて付与するロールを持つユーザが、閲覧等できるような権限を付与することで、「学内公開」のような状態を組み込むことができる。

インストール

サーバへのインストール

$PLONE_INSTANCE : /usr/local/Plone/zinstance (Plone のインスタンス)

インストールは解凍後、開発用ソースディレクトリに Products.AutoRole という名前で格納する。ダウンロードは http://pypi.python.org/pypi/Products.AutoRole より行える。

# unzip Products.AutoRole-2.1.1.zip
# mv Products.AutoRole-2.1.1 $PLONE_INSTANCE/src/Products.AutoRole

次にインスタンス内の buildout.cfg を設定する。

  eggs =
      Plone
       :
+     Products.AutoRole

  develop =
       :
+     src/Products.AutoRole

  [versions]
       :
+ Products.AutoRole = 2.1.1

最後に設定を反映する。

# bin/buildout
# bin/plonectl stop; bin/plonectl start

Ploneへのインストール

次に Plone に管理者でログインし、「サイト設定→プロダクトを追加・削除」より AutoRole PAS Plugin をインストールする。

設定

Activate の設定

ZMI で acl_users/auto_role を開き(上記インストールで追加される)、Activate タブので以下のように設定する。

Groups (getGroupsForPrincipal) : OFF 
その他 : ON

優先順は全て AutoRole を一番下にする必要がある。上位にすると、他のプラグインのユーザでログインできなくなる。

IPアドレスとロールのマッピング設定

ZMI で acl_users/AutoRole を開き Properties タブので設定する。XXX.XXX.XXX.XXX:Role または XXX.XXX.XXX.XXX/mask:Role の形式で1行に1条件ずつ複数行指定できる。

例
192.168.2.0/24:KyotoUniv

対応づけるロールは別途作成する必要があるかもしれない。(→Ploneのワークフロー設定)

プロキシの設定

Zope の前に Apache 等のプロキシを設置する場合は、Zope へのアクセスはすべてプロキシからのアクセスとなってしまう。そこで、アクセス元をプロキシを通る直前のアドレス(X-Forwarded-For ヘッダ)となるように設定する。設定は インスタンス内の buildout.cfg に以下のように記述する。

  [instance]
      :
  zope-conf-additional
+     trusted-proxy 192.168.0.1

プロキシサーバを置き換える場合は、アクセス制限が外れないように注意すること。

テンプレートの修正

対応付けられたロールを、ユーザ管理画面で付与できないようにする

ユーザ管理画面で編集すると、AutoRole で対応付けられたロール(ここでは KyotoUniv)まで付与されてしまう。そこで次のように AutoRole で対応付けたロールのチェックボックスを無効にする。portal_skins/plone_prefs/prefs_users_overview をスキンフォルダにコピーして編集する。

- disabled python:user.canAssignRole(portal_role) and default or 'disabled'" />
+ disabled python:(portal_role == 'KyotoUniv') or
+                 (user.canAssignRole(portal_role) and default or 'disabled')" />

対応付けられたロールを、グループ管理画面で付与できないようにする

グループ管理画面で編集すると、AutoRole で対応付けられたロール(ここでは KyotoUniv)まで付与されてしまう。そこで次のように AutoRole で対応付けたロールのチェックボックスを無効にする。portal_skins/plone_prefs/prefs_groups_overview をスキンフォルダにコピーして編集する。

- disabled python:group.canAssignRole(portal_role) and default or 'disabled'"
+ disabled python:(portal_role == 'KyotoUniv') or
+                 (group.canAssignRole(portal_role) and default or 'disabled')"