Plone(Zope)のroleとLDAPのグループ

Plone(Zope)って、ロール毎にいろいろ出来ることが決まっています。このロール、通常のZopeでユーザを追加するときは、この人はManager,この人はMemberって具合に割り振っていくんですが、LDAPに認証を任せた場合にどうやるんだと熱烈研究。いろいろ調べたんですが、LDAPUserFolderのREADMEとldifのサンプルが一番わかりやすかったのでちょっとまとめます。

LDAPに適当なouを追加

このouでグループを定義してあげます。こんなldifで作成。

dn:     ou=group,dc=hoge,dc=org
objectClass:    organizationalUnit
objectClass:    top
ou:     Group

上記で作成したouにグループの定義を追加

member属性か、uniqueMember属性を複数もてるオブジェクトならなんでもいいらしいです。READMEにはgroupOfUniqueNamesみたいなって書いてあったので正直にそれを選択。でもって、このオブジェクトのcnにZopeでのロールを定義。下記の例ではManagerロールを定義しています。

dn:     ou=group,dc=hoge,dc=org
cn:     Manager
objectClass: groupeOfUniqueNames
objectClass: top

作成したグループ名称定義にメンバを追加

上記で作成したdn:cn=Manager,ou=group,dc=hoge,dc=orgにManagerとして追加したいユーザのdnをuniqueMemberとして追加します。

uniqueMember:    cn=hoge_hoge,ou=Sales,dc=hoge,dc=org

acl_usersでroleとLDAPのグループを自動的にマッチさせる

ZMIでPloneSiteのacl_userをクリック→追加したLDAPプラグインをクリック→Contentsタブをクリック→acl_usersをクリック。
Groups base DNに上記で作成したグループのouを指定。上記の例だと、

ou=group,dc=hoge,dc=org

ですね。それと、Group Storageに"Group stored on LDAP server"を選択、Group mappingに"Automatically map LDAP groups to Zope roles"を選択。これでApply Changesをクリック。

以上の設定で、hoge_hogeさんなら、Managerですよってことになります。

でもさ

今回作成したLDAPはスクラッチから作ったので、そういうグループをつくって、それぞれのユーザをグループに入れるってこともできるけど、例えば既存のADの場合だとどうするんだろう。Group mappingに"Manually map..."ってあるのが気になるな。