[Product-Developers] Techniques for building an Active Directory person directory

Dan Jacka danjacka at gmail.com
Mon Feb 15 00:07:50 UTC 2010

I'm building a person directory in my Plone 3.3 intranet. The directory 
- source people from Active Directory;
- source places from Active Directory;
- allow additional people or places to be added in Plone, without a 
corresponding AD entry;
- allow a set of additional properties to be set per person/place in Plone;
- allow grouping of people or places into organisational units.

Tall order huh? I'm thinking I'll tackle it this way:

- FacultyStaffDirectory is a great start. It'll provide the basic 
directory framework, plus the grouping mechanism via Products.Relations.

- I'll define interfaces IPerson and IPlace, detailing the fields of a 
complete person/place. I'll change FSD to find and display objects 
providing those interfaces.

- Every IPerson/IPlace will be made up of either:
   - AD-sourced data plus additional Plone data,
   - An Archetypes object plus additional Plone data.

- The 'additional Plone data' will come from Zope 3 annotations. With 
annotations I can have the same set of additional data on any 
IPerson/IPlace object. I'll need a UI for editing the annotations.

- I'm using PloneLDAP for authentication, so I already have a connection 
to AD. I'll write adapters to IPerson/IPlace that use the connection to 
pull out required data.

- I'll add Person and Place content types to FacultyStaffDirectory based 
on FSD's Person type. Priveleged users can manually add a person/place 
to the directory by adding an object of the right type.

This all looks very challenging to get right. I've hunted around for any 
products that can help, including membrane, archetypes.ldapstorage, 
betahaus.memberprofile, ATMemberInfo, etc. Although their code will 
doubtless be useful, none of them gets close enough to my use case.

My approach is still very high level at the moment. I have a few 
questions for the list before I dive fully into designing this:

- Is there a third party product I've missed that will do all this for 
me? :-)
- Does my approach seem sane?
- What would you do differently?

Any pointers in the right direction would be very much appreciated.

Thank you,

More information about the Product-Developers mailing list