Headless CMS User Roles and Permissions: 9 Platforms Compared

Every headless CMS has user roles. What differs is how fine the permissions go, which plan unlocks them, and whether you set them in a UI or write them in code. We compared nine platforms on those points using each vendor’s own docs and pricing pages, checked on 22 October 2026.

Three terms first. A role is a named bundle of rights, such as Editor. A permission is one allowed action, such as publish. A scope is where that action applies: a content type, a field, a locale, an environment or a single entry. Most of role design is choosing scopes. New to the category? Start with what is a headless CMS.

How roles and permissions work in a headless CMS

Nearly every platform here uses role-based access control (RBAC). You define roles, attach permissions, and assign users or teams. Some add conditions on top, such as “only entries this user created”.

We define roles by working back from tasks:

  1. List the jobs: write drafts, translate, review, publish, manage media, change the schema, manage users.
  2. Give each job the narrowest scope. A translator needs one locale, not the whole space.
  3. Group jobs into as few roles as you can. Ten users with ten unique roles will hurt at audit time.
  4. Log in as each role and try to break it before launch.

Sanity and Directus are additive. A second role or policy can grant access but can never take it away, so one stray Editor assignment undoes a careful restriction.

RBAC capability matrix

Verified October 2026 against the docs and pricing pages linked in each platform section. “Not documented” means we could not confirm the capability in the vendor’s docs. It does not mean the feature is missing.

PlatformDefault rolesCustom roles (plan)Finest scopeLocale permissionsEnvironment scopeReview workflowAudit logSSOSelf-host
StrapiAuthor, Editor, Super AdminYes, free featureField, plus creator conditionsYes, with i18nNot documentedEnterpriseEnterpriseEnterprise, Growth add-onYes
ContentfulAdmin, Editor, Author, Translator, FreelancerPremiumField, tag, localeYesYesNot on Starter SpaceSpecific plansYes, tier not documentedNo
SanityAdministrator, Viewer; Editor, Developer, Contributor on GrowthEnterpriseDocument (GROQ filter)Not documentedPer datasetContributor drafts only (Growth)Activity log on Growth; full trail on EnterpriseEnterprise (SAML)Studio only
StoryblokOwner, Admin, EditorPremium, EliteBlock field allow and deny listsYesNot documentedCustom workflows Premium, EliteAll plans, retention variesPremium, EliteNo
PayloadNone, written in codeYes, in code (MIT)Field and rowYes, in codeNot documentedEnterpriseNot documentedEnterpriseYes
DirectusAdministrator, PublicCore tier and upField and itemNot documentedNot documentedNot documentedNot documentedTeam tier and upYes
ContentstackOwner, Admin, DeveloperYes, plan not documentedField, via exceptionsYesPublishing environmentsIf included in planYesSAML 2.0, tier not documentedNo
HygraphOwner, Admin, Developer, Editor, ContributorEnterpriseModel, stage, locale, conditionYesYesEnterprise (custom workflows)EnterpriseEnterpriseNo
WebinyNot documentedBusiness, EnterpriseModel group, model, entryYesNot documentedBusiness, EnterpriseEnterpriseEnterpriseYes

If developers run the CMS, Payload and Strapi give you custom roles with no licence cost when you self-host, and Payload goes furthest because access rules are code. A marketing team on SaaS gets the clearest permission screens in Contentful and Storyblok, but custom roles start at Premium on both. A regulated enterprise can get workflows, audit trails and SAML SSO in one contract from Contentstack, Hygraph or Sanity Enterprise.

Strapi

Strapi ships three admin roles. Author manages its own content, Editor manages and publishes any content, and Super Admin has everything. The docs list RBAC as a free feature, so custom roles work on the self-hosted Community plan. Permissions reach individual fields and, with Internationalization installed, single locales. Two built-in conditions limit a role to entries the user created or entries created by the same role. Review Workflows and Audit Logs need Enterprise.

The catch is that approval stages cost an Enterprise licence. Sources: Strapi RBAC docs, Strapi self-hosted pricing. Our service: Strapi CMS development.

Contentful

The default space roles are Admin, Editor, Author, Translator and Freelancer, and your plan decides which you get. Free has Admin and Editor, Lite adds Author, and Premium adds the rest plus custom roles. Custom role rules can target entries, content types, fields, tags and locales, on the master environment or selected ones.

The catch: anything past the default roles needs Premium. Sources: space roles, content permissions. See our Contentful services and Strapi vs Contentful.

Sanity

Administrator and Viewer exist on all plans. Growth adds Editor, Developer and Contributor, and a Contributor can write drafts but not publish. Custom roles and content resources are Enterprise. A content resource is a GROQ filter that narrows which documents a role can touch. You can set permissions per dataset, so staging and production can differ.

The catch: we found no field-level permissions in the docs. Sources: Sanity roles docs, Sanity pricing. See Sanity development and Strapi vs Sanity.

Storyblok

Owner, Admin and Editor are fixed. Custom roles add allow and deny lists for languages, folders, stories, blocks and block fields. When a user holds several roles and any one denies a resource, the denial wins. Custom roles, custom workflows and SSO come with Premium and Elite.

The catch: the roles page says nothing about permissions per workflow stage. Sources: Storyblok roles, Storyblok pricing. Our service: Storyblok development.

Payload CMS

Payload has no predefined roles. You write access functions per collection, global and field, for each operation. A function can return a query, which gives row-level rules like “users see only their own orders”, and it can read the request locale. The Admin Panel hides collections a user cannot access. The core is MIT licensed, while SSO and Publishing Workflows are Enterprise features.

The catch: the Local API skips access control unless you set overrideAccess: false. Sources: Payload access control, Payload Enterprise. Step-by-step Payload RBAC setup lives on our Payload CMS development page, or you can hire a Payload developer.

Directus

Directus combines roles with policies. Each permission covers one collection and one action (create, read, update, delete or share), lists the allowed fields, and can carry filter rules for item-level access. A policy can also restrict by IP and require two-factor login. Users with Studio access count as seats, and API-only users do not.

The catch: SSO is not on Core and starts at the Team tier. Sources: Directus access control, Directus pricing. See Directus development.

Contentstack

Owners, Admins and Developers can create roles. Permissions cover entries, assets, folders, languages, taxonomies and publishing environments, and exceptions narrow a role to specific entries or fields. Workflows assign stages to users or roles, need at least two distinct reviewers to move content forward, and write each stage change to the Audit Log. SSO runs on SAML 2.0 with role mapping per identity provider.

The catch: the role docs name no plan, and workflows are “available only if included in your plan”. Sources: create a role, workflows. See our Contentstack page.

Hygraph

Every project gets five system roles that cannot be edited. Custom roles are Enterprise only and scope content permissions by model, locale, stage, environment and condition. Content permissions are set per environment, while Management API permissions apply to the whole project.

The catch: the docs do not mention field-level scoping. Sources: Hygraph user roles, Hygraph pricing.

Webiny

Webiny sets access in roles, which the 5.x docs call user groups. A Headless CMS role can be limited to chosen content model groups, models, entries and locales, and to publish or unpublish. The pricing page lists role based access control as not included on Community. Publishing workflows start at Business, and audit logs, team management and SSO are Enterprise.

The catch: the free edition has no RBAC. Sources: Webiny user creation, Webiny pricing. See our Webiny page.

Field-level vs collection-level vs content-type permissions

Content-type permissions decide who can touch a whole model, such as Articles. Field-level permissions decide who can see or edit one field, such as a price. Row-level rules decide which entries, such as one region’s.

Payload covers all three in code. Strapi and Directus cover them in the admin UI. Contentful handles fields, tags and locales on Premium, and Sanity filters documents but not fields. Weighing the two open-source options? Read Strapi vs Payload.

Separating author, review and publish

A request we hear on most projects: writers must not publish. Every platform here can do that with a role that lacks the publish action. Approval chains are where the money goes. Strapi Review Workflows, Payload Publishing Workflows and Hygraph custom workflows are Enterprise, Storyblok custom workflows are Premium and Elite, and Webiny starts at Business.

On a tight budget, a drafts-only role plus a small group of publishers covers most teams.

Roles for APIs, tokens and service accounts

Treat every token as a user. Give each integration its own token with the narrowest role, and rotate it. The docs flag three traps:

  • In Sanity, a token that also holds a broader role, such as Editor, keeps that access even with a restrictive content resource attached.
  • In Payload, the Local API skips access control by default.
  • In Directus, a field restricted by conflicting policies comes back as null, so clients have to read null as possibly restricted.

An AI agent that drafts content should get a drafts-only role and never publish rights.

SSO, SCIM and audit logs

SOC 2 and ISO audits usually ask for SSO, automatic deprovisioning and a record of who changed what. SSO is a paid tier on every SaaS platform here. Contentful lists SCIM provisioning on its pricing page. The other role and SSO docs we read do not mention SCIM. Audit logs are Enterprise on Strapi, Hygraph and Webiny, and Sanity keeps its full audit trail for Enterprise.

Which plan unlocks roles

PlatformCustom roles fromSSO from
StrapiCommunity (free, self-hosted)Enterprise, or Growth add-on
PayloadFree (MIT, in code)Enterprise
DirectusCoreTeam
ContentfulPremiumNot documented
SanityEnterpriseEnterprise
StoryblokPremiumPremium
HygraphEnterpriseEnterprise
WebinyBusinessEnterprise
ContentstackNot documentedNot documented

Plans as of October 2026, from the vendor pricing pages linked above.

How to choose

If you have developers and need fine rules, pick Payload or Strapi. Our Payload build for a B2B SaaS shows a European mid-market B2B SaaS whose editors now publish without engineers. To staff a Strapi project, hire a Strapi developer.

If you want roles in a UI and can pay for SaaS, look at Contentful Premium or Storyblok Premium. If audit and SSO must come in one contract, shortlist Contentstack, Hygraph Enterprise or Sanity Enterprise.

Coming from WordPress? Our WordPress to headless CMS migration maps old roles to the new model. For a wider shortlist, see top open-source headless CMS platforms.

Why roles and permissions matter

A leaked editor token, or an editor at the end of a long day, should not be able to delete a schema or publish unapproved legal copy. Roles set that limit. Pick the platform whose scopes match how your team works, then keep the role list short. If you want a second pair of eyes on the design, our headless CMS development services team can review it with you.

Compare the platforms

Secure content management and workflow control

Filter the full headless CMS directory by type, licence and hosting. The User Roles & Permissions filter is selected by default.

Loading CMS systems...

Strapi

68,886 stars
8,724 forks
970 issues

Strapi is the leading open-source headless CMS. It's 100% Javascript, fully customizable, support TypeScript and developer-first. It saves API development time through a beautiful admin panel anyone can use.

API DrivenOpen SourceSelf Hosted+9

Ghost

50,059 stars
10,675 forks
51 issues

A fiercely independent platform for professional publishers. Headless Node.js REST API for developers, beautiful Ember.js admin client for editors. Used by Apple, NASA, Sky News, OpenAI & many more.

API DrivenOpen SourceSelf Hosted+4

Payload

36,650 stars
2,733 forks
381 issues

Payload is a free and open-source headless CMS aimed sharply at providing the best, developer-first experience possible to build out APIs and admin UI.

API DrivenOpen SourceSelf Hosted+3

Headless CMS roles and permissions FAQ

How do I define user roles and permissions in a headless CMS?

Start from tasks, not job titles. List who writes, who reviews, who publishes and who changes the schema, then map each task to the smallest scope the platform offers: content type, field, locale or environment. Create one role per task group, test it with a real account, and give admin rights to as few people as possible.

What are the disadvantages of using a headless CMS?

You build and host the front end yourself, editors lose the built-in page preview unless you wire one up, and governance features cost money. On most SaaS platforms in this comparison, custom roles, SSO and audit logs sit on paid tiers. On self-hosted tools you get the features free but carry the hosting, upgrades and security patches.

How do I restrict content by role without a built-in plugin?

Put the check in the API layer, not in the front end. Tag each entry with an audience or role field, issue a token per audience, and have your server or middleware filter by that field before it returns data. Payload and Directus let you express this as an access rule with a query filter, so no extra plugin is needed.

Which headless CMS has field-level access control?

Payload, Strapi and Directus support field-level permissions in their documentation. Contentful supports field rules inside custom roles on the Premium plan, Contentstack handles fields through entry exceptions, and Storyblok uses allow and deny lists on block fields. Sanity scopes access at document level with GROQ filters, and we found no field-level option in its docs.

Which plan do I need to get custom roles?

It depends on the platform. Strapi and Payload include custom roles free when you self-host, and Directus includes RBAC on its Core tier. Contentful needs Premium, Sanity and Hygraph need Enterprise, Storyblok needs Premium or Elite, and Webiny needs Business or Enterprise. Contentstack does not state a plan in its role docs, so ask sales.

Testimonials

What our clients say

Direct feedback from teams we've shipped with.

HTML CSS Hugo +5

Alpina tech did a good job during the discovery phase of our project

4.9 / 5
J
John C. Delivery Manager Headless CMS rebuild and frontend integration
Strapi Next.js React +9

I had the opportunity to work with Alpina Tech and the experience was very positive. He successfully achieved the goals set, demonstrating talent and commitment at every stage of the work. Moreover, he was always attentive to my instructions and consistently available, which greatly facilitated communication and the de...

5.0 / 5
M
Michael A. Delivery Manager Rebuild Strapi Cloud CMS, migrate content, and integrate with Next.js frontend (Render)
Next.js React JavaScript +5

Alpina Tech is not only a very talented dev, but he's a fantastic partner who has a rich business acumen and is quick to complete anything you throw at him. He knocked out work in a single day that I wasn't expecting for a week. Will definitely work with him again.

5.0 / 5
D
David R. Technical Project Manager Fix Netlify Functions & Assessment Tool for Next.js Website
React Native React Node.js +7

Alpina Tech always responded promptly and got a lot done in the limited environment we had. If things weren’t clear, he’d message and make sure he has the scope right. I highly recommend him for full stack development.

5.0 / 5
J
James K. Technical Project Manager React Native + Node.js Developer for Collectibles App with GPT-4 Integration
UX/UI Design Figma Landing Pages +4

I had the opportunity to work with Alpina Tech on the design of several landing pages and a UI kit, and I couldn’t be happier with the results. He managed to deliver high-quality designs in a very short time. The landing pages were beautifully crafted, and the UI kit was exactly what we needed to streamline the project...

5.0 / 5
R
Robert N. Delivery Manager UX/UI design for landing + UI kit
React.js React Next.js +12

Working with Alpina Tech on a headless CMS project built with Strapi, Node.js, and Next.js was a great experience. His deep understanding of modern frontend frameworks, API development, and server-side rendering (SSR) ensured a smooth and efficient development process. Alpina Tech showcased excellent React.js and Next....

5.0 / 5
W
William P. Project Manager React Developer Needed for Headless CMS with Strapi, Shadcn, and TypeScript
Swift SwiftUI UIKit +8

We worked with Alpina Tech, a top-tier Apple ecosystem developer specializing in Swift, SwiftUI, UIKit, and Combine. Delivered a seamless, high-performance app with Core Data, iCloud Sync, AVKit, MapKit, and Push Notifications. Optimized for iOS, watchOS, and macOS, ensuring smooth performance and App Store compliance....

5.0 / 5
D
Daniel O. Delivery Manager Develop iOS mobile app
JAMstack Hugo Next.js +10

I hired Alpina Tech to build a custom Hugo website. He was a pleasure to work with. He took the time to understand exactly what I wanted at the beginning of the project, and he then proposed a much better way of achieving that. He communicated regularly, provided clear and timely updates, offered ongoing support with m...

5.0 / 5
M
Matthew M. Project Manager Installing a custom theme for Hugo website
Next.js React Sanity +7

Alpina Tech was incredibly helpful and a pleasure to work with! He not only assisted with improving the SEO of my startup but also fixed a challenging Sanity bug with great patience and professionalism. His expertise and attention to detail were invaluable, and he did an excellent job overall. Highly recommended!

4.9 / 5
A
Anthony L. Technical Project Manager SEO Technical Expert for Next.js & Sanity.io Blog Integration
UI/UX Design Figma Web Design +3

I had the pleasure of working with Alpina Tech on the UI/UX design for my public website, and I am extremely impressed with his work. He significantly expanded and improved upon the original design I already had, seamlessly integrating enhancements that perfectly matched the existing style. His ability to develop great...

5.0 / 5
B
Brian D. Delivery Manager UI/UX Designer for AI Startup
Jekyll JAMstack HTML +5

Working with Alpina Tech was a great experience. He is knowledgeable and delivers high-quality work. The agency boasts a wide range of talent, making it a good choice for various projects. Communication was consistently excellent, and Alpina Tech ensured that every aspect of the project worked as expected. The work was...

5.0 / 5
K
Kevin F. Project Manager Web Developer Needed to Convert Figma Landing Page Design to Jekyll Static Site
UI/UX Design Figma Landing Pages +4

Alpina Tech and the team have completed the design quickly and it looks great. They are very responsive and were able to quickly make adjustments that I have requested.

5.0 / 5
L
Lauren E. Delivery Manager Landing page and public site pages design
iOS Swift SwiftUI +3

Alpina Tech is awesome, he fixed a complicated bug on VPN iOS app in two hours.

5.0 / 5
R
Rachel Y. Technical Project Manager ASAP iOS Developer Swift/SwiftUI (Fix VPN Mobile App)
Hugo JAMstack HTML +3

Alpina Tech did an excellent job guiding us through the process and helping us achieve our project goals.

5.0 / 5
B
Brandon A. Project Manager hugo site work
GitHub Pages HTML CSS +4

Alpina Tech helped us launch a research project website. Thank you for being available on short notice!

5.0 / 5
E
Eric B. Delivery Manager Fix github.io page issue
Technical SEO Web Strategy Management

I had the pleasure of working with Alpina Tech on leadership and technical projects. The team is highly motivated, strategically minded, and has exceptional technical SEO expertise. Their approach significantly boosted our digital presence. I highly recommend Alpina Tech for engineering and leadership-driven projects –...

5.0 / 5
S
Steven T. CEO AT CLAWBUSTER GAME PROVIDER Leadership & Technical SEO Optimization
HTML CSS JavaScript +4

Alpina Tech demonstrates all the right qualities of a strong development team – deep frontend expertise, great communication, and a proactive work attitude. A reliable partner for any technical project.

5.0 / 5
S
Scott M. Delivery Manager Frontend Development & Collaboration
Web Development Frontend HTML +3

Alpina Tech is a very professional and reliable team. Working together on web projects was extremely successful. The team showed strong technical knowledge and excellent organizational skills.

5.0 / 5
J
Jonathan N. Business Analyst - Playtech Web Development Collaboration

Keep exploring

Related headless cms services

Our team

The team you'll actually work with

We pair deep technical expertise with the kind of ownership you'd expect from your own in-house crew.

  • Same team from discovery to launch
  • Daily standups, Slack, and full transparency
  • Senior-only engineering, design, and QA
  • Long-term collaboration, not staffing
10+ years in the field
EU-based UTC+0 → UTC+3
Senior-only no juniors
Alpina Tech Team

Book a session

Let's just
{ Make it together! }

Learn how our services can improve your business processes, customer experience, and drive growth.

Schedule a meeting

Get a lightning-fast, SEO-optimized, high-performance web app for:

  • SaaS platforms
  • Marketplaces
  • Marketing websites
  • News portals
  • Catalogs & listings

Meeting agenda

  1. 01 Define goals & product scope
  2. 02 Quick technical SEO check-up
  3. 03 Outline your development roadmap
30 min
Web conferencing details provided upon confirmation.

Meet our team

Team member 1Team member 2Team member 3Team member 4Team member 5Team member 6

Success!

Form was sent to our team. We will contact you soon.

Get Your Estimate

Tell us about your project and we'll get back to you with an estimate.

Your Name
Solutions
Contact Email
Estimated Budget
Attach File