Skip to content

Adapters

FastAPI / Flask / Litestar / Django examples are under examples/.

Enforcement helpers

FastAPI

from fastapi import FastAPI, Depends, Request
from rbacx.adapters.fastapi import require_access
from rbacx import Guard
from rbacx.core.model import Subject, Resource, Action, Context

# Demo policy (permit-all for brevity)
policy = {"rules": [{"effect": "permit"}]}
guard = Guard(policy)

def build_env(request: Request):
    user = request.headers.get("x-user", "anonymous")
    return Subject(id=user), Action("read"), Resource(type="doc"), Context()

app = FastAPI()

@app.get("/secure", dependencies=[Depends(require_access(guard, build_env, add_headers=True))])
def secure():
    return {"ok": True}

Flask

from flask import Flask, request
from rbacx.adapters.flask import require_access
from rbacx import Guard
from rbacx.core.model import Subject, Resource, Action, Context

# Demo policy (permit-all for brevity)
policy = {"rules": [{"effect": "permit"}]}
guard = Guard(policy)

def build_env(req=None):
    req = req or request
    user = req.headers.get("x-user", "anonymous")
    return Subject(id=user), Action("read"), Resource(type="doc"), Context()

app = Flask(__name__)

@app.get("/secure")
@require_access(guard, build_env, add_headers=True)
def secure():
    return {"ok": True}

Django

from rbacx.adapters.django.decorators import require

@require("read", "doc")
def my_view(request):
    # Tip: provide request.rbacx_guard via RbacxDjangoMiddleware
    ...

Litestar

from litestar import Litestar, get
from litestar.di import Provide
from rbacx.adapters.litestar_guard import require
from rbacx import Guard

# Demo policy (permit-all for brevity)
policy = {"rules": [{"effect": "permit"}]}
guard = Guard(policy)

@get(
    "/secure",
    dependencies={
        "check": Provide(require("read", "doc")),   # performs the access check
        "guard": Provide(lambda: guard),            # injected into the checker
    },
)
def secure() -> dict:
    return {"ok": True}

app = Litestar(route_handlers=[secure])