How AI is powering better personalization in e-commerce [with Vercel]. Sign up now

Tiered content access and user submissions with Sanity CMS?

7 repliesLast updated: Nov 29, 2025

Hello everyone - I'm super, super new to all of this and was just curious what steps I might take using Sanity for content management and when that content is published, having some of it available for all visitors and then some of it available at certain membership tiers? Say I have part one of a tutorial available for free, but part two is behind membership tier 1 and the entire course is behind membership tier 2 (ie Patreon, but not on Patreon)? And within all of this, website members could perhaps submit content to an administrator? Do you know of any Sanity projects doing anything like this or even close to it? I feel like its definitely possible, I just would like some sort of confirmation haha. (So glad to be here and to begin learning!)
AI Update

Welcome to Sanity! Yes, absolutely what you're describing is possible, and it's a pretty common pattern that many projects use successfully. Let me break down how you'd approach this:

The Basic Architecture

Sanity will be your content management layer where editors create and publish content, but the membership/paywall logic lives in your frontend application (typically Next.js, but could be any framework). Sanity stores the content and metadata about access levels, while your app enforces who can see what based on authentication.

How It Works

In Sanity Studio, you'd add fields to your content documents to indicate access levels. For example, on your tutorial documents:

{
  name: 'accessLevel',
  type: 'string',
  options: {
    list: [
      {title: 'Free', value: 'free'},
      {title: 'Tier 1', value: 'tier1'},
      {title: 'Tier 2', value: 'tier2'}
    ]
  }
}

In your frontend, you'd:

Real-World Example

Check out Vercel's nextjs-subscription-payments starter template - it uses Stripe + Supabase for the membership infrastructure. You'd swap out Supabase's content storage with Sanity queries, but the auth/payment pattern is exactly what you need.

Access Control Options

Here's something important to understand about where access control happens:

For frontend visitor access (your use case): You handle this in your application code. Your Sanity dataset would typically be private, and your frontend would use API tokens to fetch content, then apply your membership logic before rendering.

For Studio editor access: If you need to restrict what content editors can see/edit in Sanity Studio itself, Sanity has Custom Roles and Content Resources (Enterprise plan feature) that let you use GROQ filters to define precise permissions. But this is separate from controlling what website visitors see.

User-Generated Content

For members submitting content to administrators, you have a few options:

A Typical Stack

Getting Started Steps

Preview & Draft Mode

One nice bonus: Next.js has Draft Mode which integrates beautifully with Sanity. This lets your content editors preview unpublished changes before they go live - super helpful for reviewing tutorials before making them available to members.

The beauty of this approach is that your content team works entirely in Sanity Studio managing tutorials and courses, while your membership/payment logic stays cleanly separated in your application code. It's a very flexible and scalable pattern that gives you full control over the user experience!

Show original thread
7 replies

Was this answer helpful?

Sanity – Build the way you think, not the way your CMS thinks

Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.

Related contributions