In my first Silverstripe project, the client had a list of requirements, and I had to tweak silverstripe in order to fulfill them all.
Requirements:
- Website is for Cars and Real Estates.
- Cars are divided into 4 categories: Used, New, Classified Used, Classified New
- Real Estates: Sale, Rent, Classified Sale, Classified Rent.
- Admin Can create users that belong to one of the top categories and those users can only edit/add pages they manage (they cannot see other users pages).
- When a user edits a page, a publication request is emailed to the admin who must approve in order to publish anything.
- Other Requirements:
- Site Banners with also group of users restrictions.
- Ability to add/edit Regions for real estates.
- Ability to add/edit Car Brands and Models.
Implementation:
1- Security:
- Admins
- Content Authors
- Cars
- Used
- Car Agent A
- Car Agent B
- New
- Classified Used
- Classified New
...
As you see from the above Tree, the admin creates new agents groups under their specific Category.
and being Tree based, I can add restricitions on pages, The SiteTree "Pages" looks like the following:
- Home -> only admin can edit
- Cars -> only Content Author can edit
- Used -> only Used Group can edit
- Car Agent A Page -> only Car agent A can edit
- Car Agent B Page -> Only car agent B can edit
...
Now this imposed a restriction on the admin, as an admin has to first go to "Security", add the new group then go back to "Pages"
create a page for that specific group and set the permission for that group.
I setup most of the permissions, so the admin only has to put the permissions for the new group only.
I also used Simplify Module to hide pages users cannot see, I also made it Hide a lot of Tabs (almost all the tabs except content related stuff) for Content Authors.
- I used cmsworkflow module to make a small workflow system (Admin published, Content Authors request).
I have just delivered the solution to the client, and hopefully he will find it easy and robust enough to add agents.
But I am thinking, was there a better way to do the above? How would someone with more experience in SilverStripe implement the same requirements?
Thanks.