Skip to content

Dependencies

dependencies

FastAPI dependency injection functions.

Provides dependencies for authentication, authorization, and database access. These dependencies are used across all API endpoints.

Classes

Functions

get_adapters

get_adapters(session: Session = Depends(get_session)) -> AdapterFactory

Get adapter factory for the current request.

This dependency provides access to all database adapters through a single AdapterFactory instance, reducing boilerplate across endpoints.

Parameters:

Name Type Description Default
session Session

Database session from get_session dependency

Depends(get_session)

Returns:

Type Description
AdapterFactory

AdapterFactory instance for database operations

Example

@app.post("/auth/register") def register(adapters: AdapterFactory = Depends(get_adapters)): user = create_user(users=adapters.users, ...)

Source code in fastauth/api/dependencies.py
def get_adapters(session: Session = Depends(get_session)) -> AdapterFactory:
    """
    Get adapter factory for the current request.

    This dependency provides access to all database adapters through
    a single AdapterFactory instance, reducing boilerplate across endpoints.

    Args:
        session: Database session from get_session dependency

    Returns:
        AdapterFactory instance for database operations

    Example:
        @app.post("/auth/register")
        def register(adapters: AdapterFactory = Depends(get_adapters)):
            user = create_user(users=adapters.users, ...)
    """
    return AdapterFactory(session=session)

require_role

require_role(role_name: str) -> Callable

Create a dependency that requires a user to have a specific role.

Parameters:

Name Type Description Default
role_name str

Name of the required role

required

Returns:

Type Description
Callable

Dependency function that can be used with FastAPI Depends

Example

@app.get("/admin", dependencies=[Depends(require_role("admin"))]) def admin_endpoint(): return {"message": "Admin access granted"}

Source code in fastauth/api/dependencies.py
def require_role(role_name: str) -> Callable:
    """
    Create a dependency that requires a user to have a specific role.

    Args:
        role_name: Name of the required role

    Returns:
        Dependency function that can be used with FastAPI Depends

    Example:
        @app.get("/admin", dependencies=[Depends(require_role("admin"))])
        def admin_endpoint():
            return {"message": "Admin access granted"}
    """

    def role_checker(
        current_user: User = Depends(get_current_user),
        roles: SQLAlchemyRoleAdapter = Depends(get_role_adapter),
    ):
        user_roles = roles.get_user_roles(user_id=current_user.id)
        user_role_names = [role.name for role in user_roles]

        if role_name not in user_role_names:
            raise HTTPException(
                status_code=status.HTTP_403_FORBIDDEN,
                detail=f"Role '{role_name}' required",
            )

        return current_user

    return role_checker

require_permission

require_permission(permission_name: str) -> Callable

Create a dependency that requires a user to have a specific permission.

Parameters:

Name Type Description Default
permission_name str

Name of the required permission

required

Returns:

Type Description
Callable

Dependency function that can be used with FastAPI Depends

Example

@app.delete( "/users/{id}", dependencies=[Depends(require_permission("delete:users"))] ) def delete_user(id: str): return {"message": "User deleted"}

Source code in fastauth/api/dependencies.py
def require_permission(permission_name: str) -> Callable:
    """
    Create a dependency that requires a user to have a specific permission.

    Args:
        permission_name: Name of the required permission

    Returns:
        Dependency function that can be used with FastAPI Depends

    Example:
        @app.delete(
            "/users/{id}",
            dependencies=[Depends(require_permission("delete:users"))]
        )
        def delete_user(id: str):
            return {"message": "User deleted"}
    """

    def permission_checker(
        current_user: User = Depends(get_current_user),
        roles: SQLAlchemyRoleAdapter = Depends(get_role_adapter),
    ):
        has_permission = check_permission(
            roles=roles,
            user_id=current_user.id,
            permission_name=permission_name,
        )

        if not has_permission:
            raise HTTPException(
                status_code=status.HTTP_403_FORBIDDEN,
                detail=f"Permission '{permission_name}' required",
            )

        return current_user

    return permission_checker