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')"