CMS Made Simple uses a group-based permission system where users belong to groups, and groups are assigned specific permissions. The permission model is granular, allowing per-module and per-content access control.
Built-in Groups
| Group | Admin Panel | Manage Users | Edit Content | Manage Templates | Manage Modules | Site Settings |
|---|---|---|---|---|---|---|
| Admin | Yes | Yes | Yes | Yes | Yes | Yes |
| Editor | Yes | No | Yes | No | No | No |
| Designer | Yes | No | No | Yes | No | No |
Permission Granularity
Each group can be assigned individual permissions from a list of ~50+ permissions:
Manage All Content/Add Pages/Remove PagesManage Stylesheets/Manage TemplatesManage Users/Manage GroupsModify Site Preferences/Manage Tags- Per-module permissions (e.g.,
Use Module: News,Modify Module: FormBuilder)
Permission Matrix
| Permission | Admin | Editor | Designer |
|---|---|---|---|
| Modify Site Preferences | Yes | No | No |
| Manage All Content | Yes | Yes | No |
| Manage Templates | Yes | No | Yes |
| Manage Stylesheets | Yes | No | Yes |
| Manage Users/Groups | Yes | No | No |
| Use Module: News | Yes | Yes | No |
| Modify Modules | Yes | No | No |
Creating Custom Groups
Navigate to Users & Groups > Groups > Add Group in the admin panel:
// Custom group permissions are stored in the database
// Access via: Admin Panel > Users & Groups > Groups
// Example: Create an "Analytics Manager" group with permissions:
// - Modify Site Preferences (to add tracking code in global settings)
// - Manage Templates (to edit head section of templates)
- Go to Admin Panel > Users & Groups > Groups
- Click Add Group
- Name the group (e.g., "Analytics Manager")
- Check the required permissions
- Click Submit
Analytics-Relevant Permissions
Adding analytics requires either Modify Site Preferences (for Global Content Blocks) or Manage Templates (for template head section):
{* In your template (e.g., master template), add before {/literal}</head> *}
{literal}
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
{/literal}
Best Practices
- Create a dedicated "Analytics Manager" group with only template and preferences access
- Use the Designer group for front-end developers who need template access
- Keep Admin group membership minimal
- Use Global Content Blocks for tracking code so editors cannot accidentally remove it
- Audit group permissions quarterly via Users & Groups > Groups