Skip to content

Routers Reference

ProtectedRouter

missil.ProtectedRouter

ProtectedRouter(*, prefix='', rules, tags=None, dependencies=None, default_response_class=JSONResponse, responses=None, callbacks=None, routes=None, redirect_slashes=True, default=None, dependency_overrides_provider=None, route_class=APIRoute, on_startup=None, on_shutdown=None, lifespan=None, deprecated=None, include_in_schema=True, generate_unique_id_function=generate_unique_id)

Bases: APIRouter

FastAPI router with built-in access rules applied to all its routes.

FastAPI APIRouter with a mandatory access rules parameter.

All routes added to this router automatically require the declared rules, avoiding repetition across endpoints that share the same access policy.

Example:

areas = missil.make_areas(bearer, "finances")
router = missil.ProtectedRouter(rules=[areas["finances"].READ])

All other parameters are identical to FastAPI's APIRouter.

PARAMETER DESCRIPTION
rules

One or more Missil AccessRule objects to enforce on every route.

TYPE: Sequence[AccessRule]

Source code in missil/routers.py
def __init__(
    self,
    *,
    prefix: str = "",
    rules: Sequence[AccessRule],
    tags: list[str | Enum] | None = None,
    dependencies: Sequence[FastAPIDependsClass] | None = None,
    default_response_class: type[Response] = JSONResponse,
    responses: dict[int | str, dict[str, Any]] | None = None,
    callbacks: list[BaseRoute] | None = None,
    routes: list[BaseRoute] | None = None,
    redirect_slashes: bool = True,
    default: ASGIApp | None = None,
    dependency_overrides_provider: Any | None = None,
    route_class: type[APIRoute] = APIRoute,
    on_startup: Sequence[Callable[[], Any]] | None = None,
    on_shutdown: Sequence[Callable[[], Any]] | None = None,
    lifespan: Lifespan[Any] | None = None,
    deprecated: bool | None = None,
    include_in_schema: bool = True,
    generate_unique_id_function: Callable[[APIRoute], str] = generate_unique_id,
) -> None:
    """
    FastAPI APIRouter with a mandatory access rules parameter.

    All routes added to this router automatically require the declared rules,
    avoiding repetition across endpoints that share the same access policy.

    Example:

    ```python
    areas = missil.make_areas(bearer, "finances")
    router = missil.ProtectedRouter(rules=[areas["finances"].READ])
    ```

    All other parameters are identical to FastAPI's APIRouter.

    Parameters
    ----------
    rules : Sequence[AccessRule]
        One or more Missil AccessRule objects to enforce on every route.
    """
    super().__init__(
        prefix=prefix,
        tags=tags,
        dependencies=dependencies,
        default_response_class=default_response_class,
        responses=responses,
        callbacks=callbacks,
        routes=routes,
        redirect_slashes=redirect_slashes,
        default=default,
        dependency_overrides_provider=dependency_overrides_provider,
        route_class=route_class,
        on_startup=on_startup,
        on_shutdown=on_shutdown,
        lifespan=lifespan,
        deprecated=deprecated,
        include_in_schema=include_in_schema,
        generate_unique_id_function=generate_unique_id_function,
    )

    self.dependencies += rules