Simple FastAPI declarative endpoint-level access control.
Project description
Simple FastAPI declarative endpoint-level access control, somewhat inspired by Pyramid.
@app.get("/", dependencies=[rules["finances"].READ])
def read_root():
return {"Hello": "World"}
Installation
pip install missil
Why use Missil?
For most applications the use of scopes to determine the rights of a user is sufficient enough. Nonetheless, scopes are tied to the state of the user, while 'missil' also take the state of the requested resource into account.
Let's take an scientific paper as an example: depending on the state of the submission process (like "draft", "submitted", "peer review" or "published") different users should have different permissions on viewing and editing. This could be acomplished with custom code in the path definition functions, but Missil offers a very legible and to-the-point to define these constraints.
Quick usage
import missil
from fastapi import FastAPI
from fastapi import Response
app = FastAPI()
TOKEN_KEY = "Authorization"
SECRET_KEY = "2ef9451be5d149ceaf5be306b5aa03b41a0331218926e12329c5eeba60ed5cf0"
bearer = missil.FlexibleTokenBearer(TOKEN_KEY, SECRET_KEY)
rules = missil.make_rules(bearer, "finances", "it", "other")
@app.get("/", dependencies=[rules["finances"].READ])
def read_root():
return {"Hello": "World"}
@app.get("/set-cookies")
def set_cookies(response: Response) -> None:
"""Just for example purposes."""
sample_user_privileges = {
"finances": missil.READ,
"it": missil.WRITE,
}
token_expiration_in_hours = 8
token = missil.encode_jwt_token(claims, SECRET_KEY, token_expiration_in_hours)
response.set_cookie(
key=TOKEN_KEY,
value=f"Bearer {token}",
httponly=True,
max_age=1800,
expires=1800,
)
Disclaimer
Scopes did not meet my needs and other permission systems were too complex, so I designed this code for me and my team needs, but feel free to use it if you like.
License
This project is licensed under the terms of the MIT license.
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
File details
Details for the file missil-0.1.7.tar.gz
.
File metadata
- Download URL: missil-0.1.7.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.15.1 CPython/3.12.2 Linux/5.15.146.1-microsoft-standard-WSL2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b4c9f765d69999c040804b4b8ca2d94a78068cc3ca492762c06eadb8852979d |
|
MD5 | ff198d122f8b00d47c00bfc7c7491485 |
|
BLAKE2b-256 | 9c44f8099f38324f4571786da0acdc3602621222dbfac8b5f28a9dab5f3a33d5 |
File details
Details for the file missil-0.1.7-py3-none-any.whl
.
File metadata
- Download URL: missil-0.1.7-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.15.1 CPython/3.12.2 Linux/5.15.146.1-microsoft-standard-WSL2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c0c6bb9e3ee786ca093864f202aab23afbd66813123e3ad85021dfdde7609cb |
|
MD5 | 2748ac6738079b2b649baec002431184 |
|
BLAKE2b-256 | 2d775d641b4fe0d4d4f08ff41258f52d0e7ccdac0d386b0b4a7815651e9958f2 |