RBAC and Auth core utilities including JWT token management.
Project description
ABS Auth RBAC Core
A comprehensive authentication and Role-Based Access Control (RBAC) package for FastAPI applications. This package provides robust JWT-based authentication and flexible role-based permission management using Casbin.
Features
- JWT-based authentication with customizable token expiration
- Password hashing using bcrypt
- Role-Based Access Control (RBAC) with Casbin integration
- Flexible permission management
- User-role and role-permission associations
- Middleware for authentication and authorization
Installation
pip install abs-auth-rbac-core
Quick Start
1. Authentication Setup
from abs_auth_rbac_core.auth.jwt_functions import JWTFunctions
import os
# Initialize JWT functions with environment variables
jwt_functions = JWTFunctions(
secret_key=os.getenv("JWT_SECRET_KEY"),
algorithm=os.getenv("JWT_ALGORITHM", "HS256"),
expire_minutes=int(os.getenv("JWT_EXPIRE_MINUTES", "60"))
)
# Create access token
token = jwt_functions.create_access_token(data={"sub": "user_id"})
# Verify password
is_valid = jwt_functions.verify_password(plain_password, hashed_password)
# Get password hash
hashed_password = jwt_functions.get_password_hash(plain_password)
2. RBAC Setup
from abs_auth_rbac_core.rbac.service import RBACService
# Initialize RBAC service
rbac_service = RBACService(
session=your_db_session
)
# Create a role with permissions
role = rbac_service.create_role(
name="admin",
description="Administrator role",
permission_ids=["permission_uuid1", "permission_uuid2"]
)
# Assign roles to user
rbac_service.bulk_assign_roles_to_user(
user_uuid="user_uuid",
role_uuids=["role_uuid1", "role_uuid2"]
)
# Check permission
has_permission = rbac_service.check_permission(
user_uuid="user_uuid",
resource="resource_name",
action="action_name",
module="module_name"
)
Core Components
Authentication (auth/)
jwt_functions.py: JWT token management and password hashingmiddleware.py: Authentication middleware for FastAPIauth_functions.py: Core authentication functions
RBAC (rbac/)
service.py: Main RBAC service with role and permission managementdecorator.py: Decorators for permission checking
Models (models/)
user.py: User modelroles.py: Role modelpermissions.py: Permission modeluser_role.py: User-Role association modelrole_permission.py: Role-Permission association modelrbac_model.py: Base RBAC modelbase_model.py: Base model with common fields
Usage Examples
1. Setting Up Authentication Middleware
from fastapi import FastAPI, Depends
from dependency_injector import containers, providers
from abs_auth_rbac_core.auth.middleware import auth_middleware
from abs_auth_rbac_core.rbac import RBACService
# Create a container for dependency injection
class Container(containers.DeclarativeContainer):
# Database session provider
db_session = providers.Factory(your_db_session_factory)
# RBAC service provider
rbac_service = providers.Factory(
RBACService,
session=db_session
)
# Auth middleware provider
get_auth_middleware = providers.Factory(
auth_middleware,
db_session=db_session,
jwt_secret_key=os.getenv("JWT_SECRET_KEY"),
jwt_algorithm=os.getenv("JWT_ALGORITHM", "HS256")
)
# Initialize FastAPI app
app = FastAPI()
container = Container()
app.container = container
2. Applying Middleware to Routers
from fastapi import FastAPI, Depends
from src.core.container import Container
class CreateApp:
def __init__(self):
self.container = Container()
self.auth_middleware = self.container.get_auth_middleware()
self.app = FastAPI(
title="Your Service",
description="Service Description",
version="0.0.1"
)
# Apply middleware to specific routers
self.app.include_router(
users_router,
dependencies=[Depends(self.auth_middleware)],
tags=["Users"]
)
# Public routes (no middleware)
self.app.include_router(
public_router,
tags=["Public"]
)
3. Permission Management
from abs_auth_rbac_core.util.permission_constants import (
PermissionAction,
PermissionModule,
PermissionResource
)
# permissions
permission = PermissionData(
name="User Management",
description="Manage user accounts",
module=PermissionModule.USER_MANAGEMENT,
resource=PermissionResource.USER_MANAGEMENT,
action=PermissionAction.MANAGE
)
# Check permissions in route
@app.get("/users")
@rbac_require_permission(
f"{PermissionModule.USER_MANAGEMENT.value}:{PermissionResource.USER_MANAGEMENT.value}:{PermissionAction.VIEW.value}"
)
async def list_users():
return {"users": [...]}
Error Handling
The package includes comprehensive error handling for common scenarios:
UnauthorizedError: For invalid or expired tokensValidationError: For invalid token formatsDuplicatedError: For duplicate role namesNotFoundError: For non-existent resourcesPermissionDeniedError: For insufficient permissions
Best Practices
- Always use environment variables for sensitive data (secret keys, etc.)
- Implement proper error handling for authentication and authorization failures
- Use the middleware for global authentication
- Implement proper logging for security-related events
- Regularly rotate secret keys and tokens
- Use strong password policies
- Implement rate limiting for authentication endpoints
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 abs_auth_rbac_core-0.1.7.tar.gz.
File metadata
- Download URL: abs_auth_rbac_core-0.1.7.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.13.3 Darwin/23.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6ce0054a5fa9a375657851d7fe8f167f4b9e27270c0f7e19e5117701dcae0f2
|
|
| MD5 |
15e541d348a45847b105422c9c4185fc
|
|
| BLAKE2b-256 |
d83954a96e2f1ef09ed66214a35cea51d89bd526b2d99fd6bd2c09f53d0e92e0
|
File details
Details for the file abs_auth_rbac_core-0.1.7-py3-none-any.whl.
File metadata
- Download URL: abs_auth_rbac_core-0.1.7-py3-none-any.whl
- Upload date:
- Size: 27.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.13.3 Darwin/23.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc5ba186fea0b41ce66c28a8755265f16bb2989136acf954f815e786f300abc2
|
|
| MD5 |
6e99c8437800b6459979514d309595a8
|
|
| BLAKE2b-256 |
07e42f08773553e2ec4da943075e045d0fe26bd18a5b1363b0f552c8341c42dc
|