FastAPI permissions system
Project description
fastapi-has-permissions
Introduction
Declarative permissions system for FastAPI. Define permission checks as classes or functions,
compose them with &, |, ~ operators, and plug them into FastAPI's dependency injection.
Installation
pip install fastapi-has-permissions
Usage
Class-Based Permissions
Subclass Permission and implement check_permissions():
from fastapi import Depends, FastAPI, Request
from fastapi_has_permissions import Permission
class HasAuthorizationHeader(Permission):
async def check_permissions(self, request: Request) -> bool:
return "Authorization" in request.headers
app = FastAPI()
@app.get(
"/protected",
dependencies=[Depends(HasAuthorizationHeader())],
)
async def protected():
return {"message": "You have access!"}
Permissions with parameters are automatically dataclasses:
class HasRole(Permission):
role: str
async def check_permissions(self, request: Request) -> bool:
return request.headers.get("role") == self.role
Boolean Composition
Combine permissions with & (AND), | (OR), and ~ (NOT):
# All must pass
Depends(HasAuthorizationHeader() & HasRole("admin"))
# Any must pass
Depends(HasAuthorizationHeader() | HasRole("admin"))
# Negated
Depends(~HasAuthorizationHeader())
Function-Based Permissions
Use the @permission decorator for a lightweight alternative:
from typing import Annotated
from fastapi import Header
from fastapi_has_permissions import permission
@permission
async def has_admin_role(role: Annotated[str, Header()]) -> bool:
return role == "admin"
@app.get("/admin", dependencies=[Depends(has_admin_role())])
async def admin_endpoint():
return {"message": "Admin access granted"}
Function-based permissions support the same &, |, ~ composition.
Lazy Permissions
Defer dependency resolution to request time with lazy() - useful when dependencies
may not always be available:
from fastapi.exceptions import RequestValidationError
from fastapi_has_permissions import lazy
# Skip the check instead of failing if the "age" header is missing
Depends(lazy(AgeIsMoreThan(age=18), skip_on_exc=(RequestValidationError,)))
Other Features
- Custom error responses -- set
default_exc_message/default_exc_status_codeclass variables or overrideget_exc_message()/get_exc_status_code()methods - Skip / Fail helpers -- call
skip()orfail()insidecheck_permissions()for explicit control flow - Built-in common permissions --
IsAuthenticated,HasScope,HasRoleready to use with your auth dependencies - Full FastAPI DI support --
check_permissions()accepts any FastAPI-injectable parameters
Project details
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 fastapi_has_permissions-0.1.3.tar.gz.
File metadata
- Download URL: fastapi_has_permissions-0.1.3.tar.gz
- Upload date:
- Size: 94.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","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 |
b9bb7b36933288e117e15c33ef5d7deccb3edddc1854ad5b3d83f58f6fb2310c
|
|
| MD5 |
e8939acf391bd001d0023273ef865dd5
|
|
| BLAKE2b-256 |
4dcb53c3947f0fe57a74b2cb3c0cc321943e2e45f6fa9fe06664acf2cf265397
|
File details
Details for the file fastapi_has_permissions-0.1.3-py3-none-any.whl.
File metadata
- Download URL: fastapi_has_permissions-0.1.3-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","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 |
630763278826654885ca5abd13270b7094cc73339f9e573e54c01fc1c56e498c
|
|
| MD5 |
97563fe826cfbadc6bbee185f147a0d5
|
|
| BLAKE2b-256 |
303323c70483518447422886d8ba4da2d8630ae42817f9af069e5e1d034d73fc
|