Case study 12 · Engineering Lifecycle Services

Workspace-level permissions that carry down to every project and asset

A hierarchical access model in which permissions granted on a workspace or project apply to everything inside it, checked on every request.

Partner
A multinational professional services firm
Period
October 2024 to January 2026
Photo: Juan Carlos Becerra on Unsplash
Access rules
9
Direct, group, ownership and action rank, each with inheritance, plus parent read
Token types
3
Entra ID, service-to-service and short-lived WebSocket
Top of the hierarchy
Workspace
Projects, then pipelines, agents, dashboards and endpoints

The challenge

Teams share some work and keep other work private. Assigning access asset by asset does not work when each project contains many pipelines, agents, dashboards and versions.

What we built

A Casbin policy model that follows the platform's resource hierarchy. Access can come from a direct grant, a group, ownership, a higher action or a parent resource, and every request is checked after the caller's identity is verified.

What was delivered

  • Permissions inherited from workspace to project to asset
  • Group-based access and ownership rules
  • Identity verified for users, services and WebSocket connections

Partner background

Our partner is a multinational professional services firm whose teams work with large volumes of documents, spreadsheets, databases and email. It wanted one internal platform where those teams could build data pipelines and AI agents themselves, instead of commissioning a new application for each need. The platform had to run inside the partner's Microsoft 365 and Azure environment, keep each team's work separate, and move work from experiment to production through controlled environments.

The challenge

Too many assets to manage one by one

Each project holds pipelines, agents, dashboards, endpoints and their versions. Granting access to each separately is slow and error prone.

Different kinds of callers

Requests come from users in the browser, from other services and over long-lived WebSocket connections.

Navigation needs context

A user with access to one pipeline still needs to see the project and workspace that contain it.

Objectives

  • Grant access once at the right level and have it apply below
  • Support groups and ownership
  • Rank actions so a broader permission covers a narrower one
  • Verify every caller's identity before checking permissions

Our role

CharCentric provided technical leadership and architecture within a multidisciplinary engineering team, and contributed directly to implementation. The platform was built over 16 months, from October 2024 to January 2026, as a Python and FastAPI backend on Azure.

Scope and timeline

The authorization model and token handling were built between March and July 2025.

Delivery timeline from the project history, against the overall platform build
Delivery timeline from the project history, against the overall platform build

Approach

Model the hierarchy explicitly

Resources are linked child to parent in the policy store: assets to projects, projects to workspaces. A policy on a parent applies to its children.

Rank actions

Actions are ordered, so a user allowed to manage a resource is also allowed to read it.

Separate identity from permission

Middleware verifies identity first, through an HTTP or WebSocket strategy. The policy check then answers a single question: can this subject perform this action on this resource?

Implementation

Architecture overview
Architecture overview

Policy model

Requests are evaluated as subject, object and action. Rules cover direct access, group access, ownership, action hierarchy, parent inheritance and reading a parent when a child is accessible.

Policy storage

Policies are stored in PostgreSQL through an asynchronous Casbin adapter.

Identity

Users authenticate with Microsoft Entra ID tokens. Services use machine-to-machine tokens. WebSocket connections use short-lived authorization tokens issued by the platform.

How it works, step by step
How it works, step by step

Tools and technologies

ToolPurpose
CasbinPolicy model and enforcement
PostgreSQLPolicy storage
Microsoft Entra IDUser identity
FastAPI middlewareIdentity verification
SQLAlchemyAsynchronous policy adapter

What was delivered

Access rules
9
Hierarchy levels
4
Token types
3
Policy model
1
  • A hierarchical permission model applied to every request
  • Group, ownership and action-rank rules
  • Identity verification for users, services and WebSockets
  • Parent visibility for users with access to a child resource

Why it matters

Access control that matches how an organization actually groups its work is easier to administer and harder to get wrong. Modelling the hierarchy once avoids thousands of individual grants.

If your organization is planning a platform of this kind, or needs a specific part of one designed and delivered, we would be glad to discuss it.