Database enforcer provider for casbin-fastapi-decorator
Project description
casbin-fastapi-decorator-db
Database enforcer provider for casbin-fastapi-decorator.
Loads Casbin policies from a SQLAlchemy async session and creates a casbin.Enforcer per request.
Installation
pip install casbin-fastapi-decorator-db
Or via the core package extra:
pip install "casbin-fastapi-decorator[db]"
Usage
Define a SQLAlchemy ORM model for your policy table:
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class PolicyORM(Base):
__tablename__ = "policies"
id: Mapped[int] = mapped_column(primary_key=True)
sub: Mapped[str]
obj: Mapped[str]
act: Mapped[str]
Create the provider and pass it to PermissionGuard:
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from casbin_fastapi_decorator_db import DatabaseEnforcerProvider
from casbin_fastapi_decorator import PermissionGuard
from fastapi import FastAPI, HTTPException
engine = create_async_engine("sqlite+aiosqlite:///./policies.db")
AsyncSessionLocal = async_sessionmaker(engine, class_=AsyncSession)
async def get_current_user() -> dict:
return {"sub": "alice", "role": "admin"}
enforcer_provider = DatabaseEnforcerProvider(
model_path="model.conf",
session_factory=AsyncSessionLocal,
policy_model=PolicyORM,
policy_mapper=lambda p: (p.sub, p.obj, p.act),
default_policies=[("admin", "*", "*")], # optional
)
guard = PermissionGuard(
user_provider=get_current_user,
enforcer_provider=enforcer_provider,
error_factory=lambda user, *rv: HTTPException(403, "Forbidden"),
)
app = FastAPI()
@app.get("/articles")
@guard.require_permission("articles", "read")
async def list_articles():
return []
API
DatabaseEnforcerProvider
DatabaseEnforcerProvider(
model_path: str,
session_factory: async_sessionmaker[AsyncSession],
policy_model: type,
policy_mapper: Callable[[Any], tuple],
default_policies: list[tuple] = [],
)
| Parameter | Description |
|---|---|
model_path |
Path to the Casbin model .conf file |
session_factory |
SQLAlchemy async_sessionmaker |
policy_model |
ORM model class representing the policy table |
policy_mapper |
Function that maps an ORM row to a (sub, obj, act) tuple |
default_policies |
Static policies added on top of the database policies (default: []) |
On each request the provider opens a session, loads all rows from the policy table, maps them via policy_mapper, merges with default_policies, and returns a fresh casbin.Enforcer.
Development
See the workspace README for setup instructions.
task db:lint # ruff + bandit + ty
task db:test # pytest (requires Docker for testcontainers)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file casbin_fastapi_decorator_db-0.2.3.tar.gz.
File metadata
- Download URL: casbin_fastapi_decorator_db-0.2.3.tar.gz
- Upload date:
- Size: 2.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdf5ad2b397e51d7f6c33b3d0e1b3b77f054d4cae803f5a98aa030d1e53c2014
|
|
| MD5 |
a4c91f550ad354367c17c37a55593bfe
|
|
| BLAKE2b-256 |
6d472a7e2165b6a1cd0ba4af51fe62a40f8883571404e854132e4f57fcf48abb
|
File details
Details for the file casbin_fastapi_decorator_db-0.2.3-py3-none-any.whl.
File metadata
- Download URL: casbin_fastapi_decorator_db-0.2.3-py3-none-any.whl
- Upload date:
- Size: 3.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5effa055a51f69832057d278165583e05aa4c77a345cd079aff5f081423be3e
|
|
| MD5 |
ef9e3ff74b6ff0bca960fb026b1ec2b6
|
|
| BLAKE2b-256 |
1dbfc4aadaf7dd19b5587446ab8eaede752b53198601f1b25f15166926977be2
|