Plone4.1でのサイト設定画面の各項目と権限の対応
サイト管理者(Site Administrator)
皆さんのPloneサイトではユーザー管理を「管理者(Manager)」が行っていませんか?
Plone4.0まではサイト設定画面は管理者にしか表示されなかった為、ユーザー管理についても管理者が担当している事が多いと思いますが、この運用には問題があります。
例えば、ZMI内での作業やアドオンインストール、エラーログの確認については技術者グループに担当をお願いしたいですが、ユーザーの追加や権限付与については、技術者よりも人事により近い立場のグループに担当をお願いした方が効率がよいはずです。 だからといって、人事担当の方を管理者グループに所属させると、ZMIに入れてしまったりアドオンのインストールができてしまうので、それは避けたい事が多いはずです。
問題の根本は、Ploneの「サイト設定」画面に表示されている各設定項目は、運用上複数の担当者グループに分ける事ができますが、「管理者」という一つのロールしか存在しない点にあります。
この問題を解消する為に、Plone4.1からは初期状態で「サイト管理者(SiteAdministrator)」ロールが追加されています。このロールは、ZMI内での作業やアドオンインストールはできませんが、ユーザー管理やカレンダー設定が行えるようになっています。
管理者でログインした場合のサイト設定画面は以下です。(今まで通り全項目が使用可能)

サイト管理者でログインした場合のサイト設定画面は以下です。(使用可能な項目が制限されている)

特に規模が大きめなサイト運営において、効率良い仕事の分散が出来るので、このロールの活用をおススメします。
権限の調整
初期状態でサイト管理者ロールに付与されている権限で概ね問題ないとは思いますが、組織によっては、ユーザー管理を担当する人事の方が「HTMLフィルタ設定」を変更できてしまう事を避けたい場合もあると思います。
Plone4.1ではサイト設定の各項目に対応する権限が個別に(全てではありませんが)定義されているので ZMIのPloneサイトルート[Security]タブでPermissionの設定をする事で組織にあわせた細かい権限の調整が可能になっています。
Ploneのサイト設定の項目とZMIのPermissionの対応についての調査結果は以下です。
Ploneサイト設定項目名 | ZMI[Security]タブのPermission |
---|---|
Discussion | Manage portal |
HTML Filtering | Plone Site Setup: Filtering |
TinyMCE Visual Editor | Plone Site Setup: TinyMCE |
Zope Management Interface | Manage portal |
Configuration Registry | Manage portal |
Add-ons | Manage portal |
Errors | Manage portal |
Calendar | Plone Site Setup: Calendar |
Collections | Manage portal |
Content Rules | Content rules: Manage rules |
Site | Plone Site Setup: Site |
Security | Plone Site Setup: Security |
Types | Plone Site Setup: Types |
Themes | Plone Site Setup: Themes |
Navigation | Plone Site Setup: Navigation |
Markup | Plone Site Setup: Markup |
Maintenance | Manage portal |
Plone Site Setup: Mail | |
Users and Groups | Plone Site Setup: Users and Groups |
Personal Preferences | Set own properties |
Search | Plone Site Setup: Search |
Image Handling | Plone Site Setup: Imaging |
Editing | Plone Site Setup: Editing |
Language | Plone Site Setup: Language |
例えば、サイト管理者にHTMLフィルタ設定を許可しないようにする為には、ZMIにてSite Administratorの[Plone Site Setup: Filtering]権限をOFFにします。
調査の仕方
サイト設定項目の権限についての調査結果は上記のとおりですが、Ploneの他の部分についても疑問に思った際にネット上に情報が無く、自身で調査が必要になる事もあると思います。
今回私が行った調査の流れについて書いておきますので、自身で調査が必要になった際に参考にしていただければと思います。
1) Ploneサイト設定ページのURLからview名が判明する(@@の後ろがview名)
overview-controlpanel
2) view名はzcmlファイルで定義されているので該当zcmlファイルを探す
find [plone-root]/eggs/ -name "*.zcml" | xargs grep overview-controlpanel
以下発見
plone.app.controlpanel-2.1.1-py2.6.egg/plone/app/controlpanel/configure.zcml
3) zcmlファイルを見るとclass名が判明する
<browser:page name="overview-controlpanel" for="Products.CMFPlone.interfaces.IPloneSiteRoot" class=".overview.OverviewControlPanel" permission="plone.app.controlpanel.Overview" />
4) classのソース(plone/app/controlpanel/overview.pyのclass OverviewControlPanel)を見る
__call__メソッドの戻り値がhtmlとして描画されるので、メソッドの実装を見てみるとoverview.ptを返している事がわかる。
template = ViewPageTemplateFile('overview.pt') ... def __call__(self): self.request.set('disable_border', 1) return self.template()
5) plone/app/controlpanel/overview.ptを見る
<tal:category tal:repeat="category view/categories"> <h2 tal:content="category/title" i18n:translate="">Category</h2> <div tal:define="sublists python:view.sublists(category.get('id'))"> <div tal:repeat="sublist sublists" tal:condition="sublists" style="float:left; margin-right: 1em; width: 29%"> <ul class="configlets" tal:condition="sublist"> <li tal:repeat="action sublist">
sublistが各設定項目を表現していて、sublistはview.sublistsから取得している事が判明する。
6) viewはOverviewControlPanelのインスタンスなので、再度plone/app/controlpanel/overview.pyのclass OverviewControlPanelを見る。
sublistsメソッドを調べる
def sublists(self, category): actions = self.cptool().enumConfiglets(group=category) return three_column_list(actions) def cptool(self): return getToolByName(aq_inner(self.context), 'portal_controlpanel')
toolのportal_controlpanelを使用していることがわかる
7) toolはZMIで参照が可能なのでZMIでportal_controlpanelを見る。
各項目(Name,Idより判別)のPermissionを見ると必要な権限がわかる。

Use the Source, Luke !
上記の調査を実際に行ってみると、結果だけではなく仕組みについても理解が深まったので、コントロールパネルに自身のviewを追加したり、より細かい権限設定を行う事も可能になりました。
「ソースを使え、ルーク!」という事で、やはりソースを追うと色々な可能性が見えてきまので、是非皆さんもソースを調べてみてください。