Open simeoncode opened 8 years ago
Thank you for your question. Better CMS was built as a lightweight CMS with attention to create a developer friendly and publisher focused content management system. You will find features as modular architecture, separated independent core, multi-inherited templates, multi languages, content versioning per language and etc., but keep in mind, that it wasn't our intent to create an enterprise ready CMS with this project. Our vision was to give main CM features out the box and then provide good tools for developers to extend CMS via modules. Modules ready to use: https://github.com/devbridge/BetterCMS/wiki/Optional-Modules How to create a custom module: https://github.com/devbridge/BetterCMS/wiki/Modules-for-Developers
Hi, I've been looking into using this software and have some questions regarding its architecture and the project status in a number of feature areas. The questions can be viewed as feature requests as well. But I don't have enough specific knowledge of BetterCMS to articulate the precise and relevant tickets.
The point is to be a bit enterprise-focused, i.e. applicable when the software is being used by a large and/or complex organisation. If the software is not intended for this, i.e. if scalability is not a goal, please feel free to close this issue. If not, I imagine that the questions and discussion/answers could be useful for anyone to read, so I chose a GitHub issue as the medium for these thoughts.
How are peripheral properties stored?
Firstly, my definition of the "core" her would be: The part of the code that is working with the system's primitive objects, while exposing an internal and external API for data access. One of the first thing I look at in a platform is how small its core is. If a CM platform can produce a strong feature list while keeping the core small and slow-moving, it means that the core is well-aligned with the project's long-term goals.
This has to be combined with the fact that all moving parts in the platform are actually using the core (a small core is easy to create if all subsystems are circumventing it). But if all subsystems are using the core, we have a great platform for coherency.
My idea of a good core is when the platform has an object wrapper that all parts of the system is using for all needs of access and persistence. That means that e.g. changes to permissions can be implemented in one place only, while applying to all parts of all of the subsystems. It also means that all persistence is done in the same way. To clarify with an example, if users are created in the CMS backoffice they should A) be using the same object wrapper as other objects in the system and B) roles should be maintained in the same way (not in e.g. configuration).
Taken to its extreme, it will mean that all entities of the system (including templates, configuration, backoffice itself etc.) are stored in the same place, e.g. a database, using the core. That particular case might not be optimal, of course, but coherence should be the starting point. All deviations should be well-founded decisions. Inevitably, entities that not are persisted in the same way as the baseline (those entities are the ones I refer to as “peripheral properties”) will grow the codebase and affect maintenance as functionality is introduced that should work across various persistence layers.
Are permissions granular, inheritable and scalable?
Permissions are a critical tool for managing a solution used by large organizations with hundreds of editors. This boils down to four general bullets:
To clarify, some example questions: Can any combination of role and user permissions be set on a particular content item? Can all possible actions in the system (and its subsystems) be controlled using permissions? Can a content item inherit permissions from parent nodes? Can a content item prevent inheriting permissions from its parent node? Can roles use inheritance to express complex roles? Can publishing a content item be restricted? Can publishing a content item in a particular language be restricted? Can publishing a content item in a particular language to a particular data location be restricted? How many roles can a role inherit? How many roles can a user be assigned to? How many permission sets on a node is supported?
Assorted CM questions
Assorted infrastructure questions
Thanks for reading
I'm hoping that my questions gives you an insight into how the software could evolve in order to scale up to enterprise use. Sorry for the stir :seedling:
Thanks!