[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
must:
- 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,
or:
- 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,
Dan
More information about the Product-Developers
mailing list