DEV Community

Cover image for Real-World System Design: Authentication, RBAC, and Multi-Tenant Architecture (Part 1)
Shailesh Singh
Shailesh Singh

Posted on

Real-World System Design: Authentication, RBAC, and Multi-Tenant Architecture (Part 1)

Modern applications rarely fail because of UI bugs. They fail because of poor system design decisions—especially around authentication, authorization, and tenant isolation.

In this article series, I’ll break down real-world system design patterns used in production systems, focusing on:

Authentication (Auth)

Role-Based Access Control (RBAC)

Multi-tenant architecture

Permissions, policies, and access boundaries

Common mistakes and scaling challenges

This series is not theory-heavy. It’s based on practical patterns, trade-offs, and decisions teams face when building real systems.

Why This Series?

Most tutorials show:

“Add JWT authentication”

“Protect a route”

“Create roles like admin and user”

But real systems need answers to harder questions:

How do you design auth for multiple organizations (tenants)?

How do roles differ per department or project?

How do you avoid permission explosions?

How do you scale RBAC without rewriting everything later?

These are the problems we’ll solve—step by step.

The Core Building Blocks

Before diving deep, let’s clarify the three pillars this series revolves around.

1. Authentication (Who are you?)

Authentication answers one question:

Who is making this request?

Common approaches:

Email/password

OAuth (Google, GitHub, SSO)

Token-based auth (JWT, opaque tokens)

Session-based auth

⚠️ Authentication does not decide what you can do. It only proves identity.

2. Authorization & RBAC (What are you allowed to do?)

Authorization answers:

What can this authenticated user access or modify?

RBAC is the most widely used model:

Users → Roles → Permissions

But in real systems:

Roles vary per tenant

Permissions vary per context

Some actions depend on ownership or hierarchy

We’ll explore:

Simple RBAC

Role-Permission mapping

Context-aware permissions

When RBAC breaks and what to use instead

3. Multi-Tenant Architecture (Where do you belong?)

Multi-tenancy answers:

Which organization’s data and rules apply to this user?

Examples:

SaaS products

Enterprise tools

Internal platforms used by multiple companies

Key challenges:

Data isolation

Tenant-specific roles and permissions

Scaling without duplicating logic

Preventing cross-tenant access bugs

A single missed check here can become a security incident.

A Real-World Example We’ll Build On

Throughout this series, we’ll use a realistic scenario:

A SaaS platform used by multiple companies.
Each company has departments, users, roles, and permissions.

High-level structure:

Organization (Tenant)
└── Company
└── Department
└── Users
└── Roles
└── Permissions

Rules:

A user belongs to one tenant

Roles are defined per tenant

Permissions control access to features and data

Access depends on both role and context

This mirrors how many enterprise systems actually work.

Common Mistakes Teams Make Early

Before we design it properly, let’s call out common mistakes:

❌ Hard-coding roles (if user.role === 'admin')
❌ Assuming one global admin role
❌ Mixing authentication and authorization logic
❌ Ignoring tenant boundaries in queries
❌ Designing RBAC too late (after features grow)

This series will help you avoid these traps.

What This Series Will Cover

Planned articles include:

Authentication in Real Systems

JWT vs sessions

Token lifecycle

Secure login flows

Designing RBAC That Scales

Role vs permission design

Database schema patterns

Avoiding role explosion

Multi-Tenant Authorization

Tenant isolation strategies

Query-level security

Middleware patterns

Advanced Patterns

Policy-based access control

Attribute-based access control (ABAC)

Feature flags & permission gates

Common Security Pitfalls

Privilege escalation bugs

Insecure defaults

Authorization testing strategies

Who This Series Is For

This series is useful if you:

Build backend systems

Work on SaaS products

Design APIs

Want to understand why patterns exist, not just how to implement them

Basic familiarity with backend development is assumed, but the concepts apply across stacks.

What’s Next

In Part 2, we’ll start with:

Authentication design in multi-tenant systems
— how to structure identity, tokens, and tenant context correctly from day one.

If you’re interested in real-world system design patterns, follow along.

About the Author

I’m a software engineer working on real-world web systems, focusing on scalable backend design, authorization models, and clean architecture. I write about lessons learned from building and evolving production systems.

Top comments (0)