[Zope3-Users] Programatically add plugins to PAU

Michael Howitz mh at gocept.com
Wed Apr 12 02:39:11 EDT 2006


Florian Lindner wrote:
> Hello,
> I've a PluggableAuthentication and want to add and register some plugins to 
> it.
> 
> Adding works fine:
> 
> principal_folder = 
> zope.app.authentication.principalfolder.PrincipalFolder(prefix = "cs")
> 
> pau["PrincipalFolder"] = principal_folder
> 
> and I think I can select it with:
> 
> pau.credentialsPlugins = [principal_folder]
> 
> but how to register it before?
> 
> And how do I select credential plugins?

This is how we did it in a project:
createAuthenticationUtils is called on handling the ObjectAddedEvent for 
the folder (which is programmatically made a site) which should contain 
the PAU.

HTH, mac

-------------------------------

from zope.app.security.interfaces import IAuthentication
from zope.app.authentication.interfaces import IAuthenticatorPlugin
from zope.app.appsetup.bootstrap import ensureUtility
from zope.app.authentication.authentication import \
     PluggableAuthentication
from zope.app.authentication.principalfolder import PrincipalFolder
from zope.app.authentication.groupfolder import \
     GroupFolder, GroupInformation
from zope.app import zapi

from myproject import config

def addUtilityToPAU(pau, interface, utility_factory, id, name):
     utility = utility_factory()
     pau[id] = utility

     reg_man = pau.registrationManager
     reg = site.UtilityRegistration(name, interface, utility)
     reg_man.addRegistration(reg)
     reg.status = u'Active'

def _addGroupInformation(group_folder, id, title, description):
     group = GroupInformation()
     group.title = title
     group.description = description
     group_folder[id] = group

def createAuthenticationUtils(obj):
     ensureUtility(obj, IAuthentication, '', PluggableAuthentication,
                   copy_to_zlog=False)
     auth = zapi.getUtility(IAuthentication)
     auth.credentialsPlugins = (u'Session Credentials',)
     addUtilityToPAU(auth, IAuthenticatorPlugin, PrincipalFolder,
                     'principal_folder', u'Benutzerverwaltung')
     addUtilityToPAU(auth, IAuthenticatorPlugin, GroupFolder,
                     'group_folder', u'Rollenverwaltung')
     auth.authenticatorPlugins = (u'Benutzerverwaltung',
                                  u'Rollenverwaltung',)
     group_folder = auth['group_folder']
     for group in config.company_groups:
         _addGroupInformation(group_folder, group['id'],
                              group['title'], group['description'])



More information about the Zope3-users mailing list