Roles and permissions in a CMS are supposed to reduce risk without slowing publishing. In practice, many teams end up with either a free-for-all where anyone can publish anything, or a locked-down maze where simple changes require an admin.
The goal is not perfection. The goal is a small, understandable access model that matches how work actually moves from draft to review to publish, with clear ownership of risky actions like deleting content, changing global navigation, or editing templates.
This post walks through a practical method you can apply to most CMS platforms, whether you run a traditional admin UI or a headless setup with multiple environments.
What roles and permissions actually do
Roles and permissions are a control layer that answers three questions:
- Who can do something? (user, group, role)
- What can they do? (create, edit, publish, delete, manage schema, manage users)
- Where can they do it? (content type, section, locale, site, environment)
They do not replace process. If your team does not agree on what “ready to publish” means, no permission setting can fix that. But good roles can make the safe path the easy path by guiding people into drafts, reviews, and approvals.
Think of permissions as guardrails for high-impact actions: publishing, unpublishing, deleting, editing system settings, and bypassing review.
Map your content lifecycle first
Before you create roles, map the steps a typical piece of content goes through. Keep it simple and honest. Most small teams have a lifecycle like:
- Draft created
- Draft edited
- Review requested
- Reviewed and revised
- Approved
- Published
- Updated later (repeat review as needed)
- Archived or deleted (rare)
Then list which actions are risky. Examples:
- Publishing to production
- Editing the homepage hero, navigation, or footer
- Changing templates or global components
- Deleting entries, assets, or categories used by many pages
- Changing redirects or URL fields
Your permissions should mostly focus on making these risky actions intentional and reviewable, while leaving low-risk drafting fast.
Build a minimal role set
Most teams can start with three or four roles. More roles usually increases confusion and support burden. A minimal set also helps onboarding because it is easy to explain “what you can do” on day one.
A practical starter set
- Author: create and edit drafts in assigned sections; cannot publish; cannot delete; cannot change settings.
- Editor: edit any draft; request changes; approve content; can publish within defined content types; limited delete permissions if you truly need it.
- Publisher (optional): can publish and unpublish to production; used when you want editorial approval separate from release responsibility.
- Admin: manage users, roles, schema, integrations, environments, and global settings.
Key Takeaways
- Design roles around the content lifecycle, not job titles on an org chart.
- Keep the role set small; scope access by section or content type instead of multiplying roles.
- Protect the highest-impact actions: publish, delete, schema changes, and global components.
- Document a “safe path to publish” so permissions and process reinforce each other.
Notice what is missing: “Marketing Manager”, “SEO Specialist”, “Executive”, and similar titles. People change roles. Contractors come and go. Permissions should describe capabilities, not seniority.
Permission patterns that scale
Once you have a minimal role set, you can choose patterns to scope access without creating ten versions of “Editor”. Here are the most durable approaches.
Pattern 1: Scope by content type and section
Instead of creating separate roles for each team, keep the same roles and limit access by:
- Content type (Posts, Pages, Products, FAQs)
- Section (Blog, Docs, Help Center)
- Site (if you run multiple sites in one CMS)
This keeps the mental model consistent: “Author is always draft-only” while the scope determines what they can touch.
Pattern 2: Separate approval from production publish
If mistakes are costly, you can separate “content approved” from “content published”. Approval can live in an editorial workflow state, while publishing is a capability restricted to a smaller group.
Pattern 3: Limit delete; use archive instead
Deleting content often breaks pages in surprising ways. Prefer an Archived state, or “Unpublished but retained” where the entry remains for audits and future restoration. Grant delete rights only when there is a clear need (for example, legal removal, duplicate cleanup after a migration).
If it helps, you can summarize your model as a simple matrix. Keep it conceptual, not overly detailed:
Role Draft (create/edit) Submit for review Approve Publish Delete Manage schema/users
Author Yes Yes No No No No
Editor Yes Yes Yes Limited Rare No
Publisher Yes Yes Optional Yes No No
Admin Yes Yes Yes Yes Yes Yes
The word “Limited” matters. It forces you to define boundaries: publish which types, to which environment, and with what safeguards.
Real-world example: a small team setup
Consider a 12-person organization running a site with a blog, a resources library, and a donation landing page. They have three frequent contributors, one comms lead, and an engineer who maintains the CMS and site build.
They implement:
- Authors: three contributors who can create and edit drafts for Blog Post and Resource items. They cannot publish.
- Editors: the comms lead who can edit anything, approve, and schedule publishing for Blog Post and Resource. They cannot edit site settings or templates.
- Publisher: a backup person (operations manager) who can publish in emergencies when the comms lead is out. Publishing is allowed, but only for Blog Post and Resource. Donation pages are excluded.
- Admin: the engineer who can change schemas, integrate forms, manage roles, and edit global navigation.
Donation pages are treated as high impact. Only Admin can edit them, and changes require a second set of eyes in a separate review step. The team still moves quickly on low-risk blog drafts, but the most sensitive pages have tighter control.
This is the theme: tighten permissions where the blast radius is large, and keep everything else simple.
Copyable implementation checklist
Use this checklist when setting up or cleaning up roles. It is intentionally platform-agnostic.
- Inventory your content types: list each type and label it low, medium, or high impact.
- Define lifecycle states: Draft, In Review, Approved, Published, Archived (or your equivalents).
- Choose a minimal role set: Author, Editor, Admin (add Publisher only if needed).
- Decide publish rules:
- Who can publish to production?
- Is scheduling allowed? For which roles?
- Do high-impact types require extra approval?
- Restrict deletion: prefer archive; require admin for permanent deletes.
- Lock global components: navigation, footer, homepage modules, templates, and shared blocks.
- Scope access: by content type, section, locale, and environment as your CMS supports.
- Write a one-page policy: “How we publish” plus who to contact for access changes.
- Test with real scenarios: a new post, an urgent correction, a homepage change, a rollback.
- Review quarterly: remove unused accounts, adjust scopes, and confirm high-impact rules still match reality.
Common mistakes to avoid
- Creating too many roles: “Blog Editor”, “Docs Editor”, “Newsletter Editor” becomes unmanageable. Prefer scoping rules with a small set of roles.
- Giving publish rights to everyone “for speed”: it feels fast until an accidental publish breaks the homepage or pushes an unfinished update.
- Letting delete be the default cleanup tool: deletions remove history and can break references. Archive is safer.
- Forgetting non-content settings: redirects, SEO fields, URL slugs, and shared components often cause the biggest incidents.
- No documentation: without a short written policy, people work around the system and permissions drift.
When not to over-engineer permissions
Some teams try to model every nuance: separate roles for each department, per-field permissions, custom approvals per page. That can backfire. Consider keeping it simpler if:
- You publish infrequently and the same two people review everything anyway.
- Your CMS does not support fine-grained controls cleanly, and workarounds will create fragile admin overhead.
- You are in an early stage where content types and workflows are changing weekly.
In these cases, focus on two things only: protect production publishing and protect global settings. Everything else can evolve once the team stabilizes.
Conclusion
Good CMS permissions are a product of clarity, not complexity. Start from your real lifecycle, use a minimal role set, and lock down the actions with the largest blast radius. If your system is easy to explain and hard to misuse, it will keep working as your team grows.
FAQ
How many roles should a small team have?
Usually three: Author, Editor, Admin. Add a Publisher role only if you need to separate editorial approval from production release responsibility.
Should authors ever publish to production?
Only if your risk is low and you have strong review habits outside the CMS. In most teams, keeping publishing to Editors (or Publishers) reduces accidental releases without slowing drafting.
What if our CMS does not support workflow states?
You can still approximate the lifecycle with conventions: a “Draft” section, naming rules, and a requirement that only Editors can publish. If possible, add a simple “Status” field to make review visible.
How do we handle contractors or temporary access?
Create accounts with the same base roles but narrower scope (specific sections or content types), set an end date for access review, and avoid granting delete or publish unless it is truly required.