Role-based access control (RBAC) and permission management extension for oauth2fast-fastapi
Project description
permissions2fast-fastapi
🔒 Role-Based Access Control (RBAC) extension for oauth2fast-fastapi.
Easily manage user roles and permissions in your FastAPI application with support for High-Performance Redis Caching.
Features
- 👥 Role Management: Create, assign, and manage roles for users.
- 🔑 Granular Permissions: Define specific permissions and assign them to roles or directly to users (polymorphic assignments).
- � Redis Caching (Optional): High-performance permission evaluation using Redis to minimize database lookups.
- �🛡️ Route Protection: Dependencies to protect endpoints based on roles or permissions.
- ⚡ Async Support: Fully async database interactions via
pgsqlasync2fast-fastapi. - 🔌 Seamless Integration: Built to extend
oauth2fast-fastapi.
Installation
pip install permissions2fast-fastapi
Configuration
This package uses the same database connection logic as oauth2fast-fastapi. Configure your environment variables in .env.
Basic Settings
# Database Configuration
DB_CONNECTIONS__AUTH__USERNAME=db_user
DB_CONNECTIONS__AUTH__PASSWORD=db_password
DB_CONNECTIONS__AUTH__HOST=localhost
DB_CONNECTIONS__AUTH__DATABASE=db_name
DB_CONNECTIONS__AUTH__PORT=5432
Advanced Features (Redis)
You can enable Redis caching by setting the following environment variables:
PERMISSIONS_REDIS_RBAC_ENABLED=True
# Redis connection details (if caching is enabled)
PERMISSIONS_REDIS__HOST=localhost
PERMISSIONS_REDIS__PORT=6379
PERMISSIONS_REDIS__DB=0
# PERMISSIONS_REDIS__PASSWORD=your_redis_password
Usage
1. Basic Integration
from fastapi import FastAPI
from permissions2fast_fastapi import permissions_router, roles_router
from oauth2fast_fastapi import router as auth_router
app = FastAPI()
app.include_router(auth_router)
app.include_router(permissions_router)
app.include_router(roles_router)
2. Protecting Routes
Use the provided dependencies to restrict access to endpoints. The system will automatically check Redis cache if enabled, and fallback to database queries if needed.
from fastapi import Depends
from permissions2fast_fastapi.dependencies import has_permission, has_role
from oauth2fast_fastapi.models import User
# Require a specific role
@app.get("/admin-dashboard")
async def admin_dashboard(user: User = Depends(has_role("admin"))):
return {"message": "Welcome Admin"}
# Require a specific permission
@app.get("/edit-post")
async def edit_post(user: User = Depends(has_permission("posts.edit"))):
return {"message": "You can edit posts"}
3. Using the Default Seeder
To quickly set up default access control for the package routes itself (admin role and necessary permissions to add/remove routes, roles, and permissions), you can use the built-in JSON seeder during the application startup process (lifespan).
from contextlib import asynccontextmanager
from fastapi import FastAPI
from sqlmodel.ext.asyncio.session import AsyncSession
from oauth2fast_fastapi import get_manager
from permissions2fast_fastapi import seed_rbac_from_json
@asynccontextmanager
async def lifespan(app: FastAPI):
# This example assumes you have an 'auth' bound session using pgsqlasync2fast-fastapi
manager = get_manager()
engine = manager.get_engine("auth")
# Run the seeder when starting up your application
async with AsyncSession(engine) as session:
# Seeder is idempotent and won't duplicate data on multiple startups
await seed_rbac_from_json(session, route_prefix="")
yield
app = FastAPI(lifespan=lifespan)
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 permissions2fast_fastapi-0.5.0.tar.gz.
File metadata
- Download URL: permissions2fast_fastapi-0.5.0.tar.gz
- Upload date:
- Size: 20.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca0c1ed1fc38d7e6c37c0fd7c98af2c0a1a3c0e8184f6050cb195031c2da65e9
|
|
| MD5 |
97050bcf43d755fc88245d5b3d68fa27
|
|
| BLAKE2b-256 |
a936d621d3d9c4bfee949d770aef6d48f3a607e7a2ae655464a5a3fa92836cbf
|
File details
Details for the file permissions2fast_fastapi-0.5.0-py3-none-any.whl.
File metadata
- Download URL: permissions2fast_fastapi-0.5.0-py3-none-any.whl
- Upload date:
- Size: 25.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abc095c242303805dd5ee1b89922ab7e52c3c60cc9ca0f4991f7e20de0343c4c
|
|
| MD5 |
dbe7b1ecf5fcd8e4804fb65f034cf797
|
|
| BLAKE2b-256 |
44e9486b3a974652e26fac5928dce6fc3e41471c915df06c62a4bb3e5b1fd22e
|