Skip to main content

Simple FastAPI declarative endpoint-level access control.

Project description

Missil

Simple FastAPI declarative endpoint-level access control, somewhat inspired by Pyramid.

[DOCS] [SOURCE]

Package version Supported Python versions

@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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

missil-0.1.7.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

missil-0.1.7-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

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

Hashes for missil-0.1.7.tar.gz
Algorithm Hash digest
SHA256 9b4c9f765d69999c040804b4b8ca2d94a78068cc3ca492762c06eadb8852979d
MD5 ff198d122f8b00d47c00bfc7c7491485
BLAKE2b-256 9c44f8099f38324f4571786da0acdc3602621222dbfac8b5f28a9dab5f3a33d5

See more details on using hashes here.

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

Hashes for missil-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 0c0c6bb9e3ee786ca093864f202aab23afbd66813123e3ad85021dfdde7609cb
MD5 2748ac6738079b2b649baec002431184
BLAKE2b-256 2d775d641b4fe0d4d4f08ff41258f52d0e7ccdac0d386b0b4a7815651e9958f2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page