# Designing roles and permissions for a SaaS with multiple plans

**URL:** <https://community.weweb.io/t/designing-roles-and-permissions-for-a-saas-with-multiple-plans/20795>\
**Category:** How do I?\
**Created:** [February 17, 2026, 6:45am UTC](https://community.weweb.io/t/designing-roles-and-permissions-for-a-saas-with-multiple-plans/20795 "2026-02-17T06:45:49Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![MrUnfreeze](https://avatars.discourse-cdn.com/v4/letter/m/e95f7d/32.png) [@MrUnfreeze](https://community.weweb.io/u/MrUnfreeze)\
**Post date:** [February 17, 2026, 6:45am UTC](https://community.weweb.io/t/designing-roles-and-permissions-for-a-saas-with-multiple-plans/20795/1 "2026-02-17T06:45:49Z")

</div>

Hi everyone,

I’m building a SaaS with multiple subscription plans and I want to restrict access to certain pages and API endpoints based on the user’s plan. I was told that a “proper” way to do this is to have a users table, a roles table, and a permissions table ( I use Xano as a back-end).

Has anyone here implemented this kind of role/permission system for a SaaS and could share a simple schema or best practices, or point me to a good resource to follow?

Many thanks!

---

<div class="post-metadata">

**Author:** ![emdiemeric](https://avatars.discourse-cdn.com/v4/letter/e/e9bcb4/32.png) [@emdiemeric](https://community.weweb.io/u/emdiemeric)\
**Post date:** [February 17, 2026, 7:51am UTC](https://community.weweb.io/t/designing-roles-and-permissions-for-a-saas-with-multiple-plans/20795/2 "2026-02-17T07:51:18Z")

</div>

Hi,

You can create a few tables, such as Roles. Then you link the User’s table to the Roles table. This could be done ina number of ways, depending on your pricing model: roles, addons etc. Depending on what and how you are selling.

On user creation, you have a workflow to select/ link the role to the User.

Then on WeWeb, when you trigger workflows or page navigation etc , you query and check the user’s role. If correct, then you trigger the workflow; if not, then you may show a “You do not have access. Please upgrade“ etc.

This is a very simplistic explanation, but if you use the built-in help chat in weweb, combined with xano chat and claude/chatgpt, you can get there.
