QuoteWie trennst Du denn Authorization vom Code?
Inwiefern trennen? Ich habe in der Regel kleine oder auch größere REST-APIs.
Da ich in der Regel mit FastAPI&Python arbeite, so:
@router.get("/users", dependencies=[Depends(user_with_admin_rights)])
async def get_users(db: Annotated[AsyncSession, Depends(get_db)]) -> UserResponse:
result = await db.execute(...)
return [UserResponse.from_orm(u) for u in result.scalars()]
D.h. in den Dependencies wird definiert, wer das machen darf. Die Funktion
user_with_admin_rights checkt dann, ob der aktuelle User ein Admin ist und das tun darf. (normalerweise gibt es mehr als nur User und Admin, im aktuellen Projekt habe ich gerade 4 Rollen, die alle unterschiedliche Dinge tun dürfen).
Wenn man will, kann man diese Dependency auch dem Router hinzufügen, sodass dann z.B. gleich alle Endpunkte unter
/users (oder wo auch immer) bestimmte Rechte erfordern. Generell also über die Decorators gelöst. Glücklicherweise habe ich nur sehr selten den Fall, dass ich noch im Code selber eine Fallunterscheidung treffen muss (kommt aber vor).