Overview of b-org
To the user, b-org presents itself as three content types:
- Department
- A container for employees, and a source of groups. That is, each department becomes a group, and the employees within that department become group members.
- Employee
- Information about employees, and a source of users. That is, each active employee object becomes a user who can log in and interact with the portal.
- Project
- A project workspace - a folder where employees can collaborate on content. Content inside the project folder has a custom workflow, and employees who are related to the project (by reference) have elevated permissions over this content.
This seemingly innocuous orchestration of functionality is achieved by a variety of means:
- Archetypes
- Used to build the actual content types and their schemata.
- The Zope 3 Component Architecture
- Is used to make all this exensibility possible - you will see lots of examples of interfaces, adapters and utilities.
- Membrane
- The content types are registered with membrane to be able to act as groups and users
- PAS and PlonePAS
- The Pluggable Authentication Service is used by membrane to actually provide user sources. A custom PAS plug-in is also used to manage local roles for members and managers within projects and departments.
- GenericSetup
- The next-generation set-up and installation framework is used to install and configure b-org. charity demonstrates how GenericSetup XML profiles can be used directly, without depending on the actual GenericSetup import mechanism.
- Zope 3 events
- Zope 3's event dispatch mechanism is used to ensure employee users actually own their own Employee objects, among other things.
- Zope 3 views
- The charity demo uses views for its display templates.
- Annotations
- Employees' passwords are hashed and stored in an annotation
- Placeful workflow
- To let content inside projects have a different workflow to that of the rest of the site, each project uses a CMFPlacefulWorkflow policy.
On the following pages, you will learn about each of these components and how it fits together. Meanwhile, you can follow along the code by looking in the subversion repository, or getting b-org from its product page.