Атрибут scopes
Атрибут scopes относится к классу SecurityScopes
и представляет собой список строк. В него FastAPI автоматически собирает все области доступа,
которые были указаны в параметре scopes функции Security
для текущего маршрута. Этот атрибут доступен внутри зависимости безопасности
и позволяет проверить, какие именно права требует эндпоинт. Атрибут доступен только для чтения
и заполняется фреймворком перед вызовом зависимости.
Синтаксис
security_scopes.scopes
Пример
Давайте создадим зависимость, которая выводит список требуемых областей доступа:
from fastapi import FastAPI, Security, Depends
from fastapi.security import SecurityScopes, OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token')
def get_current_user(security_scopes: SecurityScopes):
return {'required_scopes': security_scopes.scopes}
@app.get('/items/')
def read_items(
user: dict = Security(get_current_user, scopes=['items:read', 'items:write'])
):
return user
Результат выполнения кода для авторизованного запроса:
{"required_scopes": ["items:read", "items:write"]}
Пример
Давайте проверим, что все требуемые области доступа входят в список разрешённых у пользователя:
from fastapi import FastAPI, Security, HTTPException
from fastapi.security import SecurityScopes, OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token')
def get_current_user(security_scopes: SecurityScopes):
user_scopes = ['items:read']
for scope in security_scopes.scopes:
if scope not in user_scopes:
raise HTTPException(status_code=403, detail='Not enough permissions')
return {'scopes': security_scopes.scopes}
@app.get('/items/')
def read_items(
user: dict = Security(get_current_user, scopes=['items:read'])
):
return user
Результат выполнения кода:
{"scopes": ["items:read"]}
Смотрите также
-
класс
SecurityScopes,
который хранит области доступа текущего запроса -
атрибут
scope_str,
который возвращает области доступа в виде строки -
функция
Security,
которая объявляет зависимость с требуемыми областями доступа -
параметр
scopes,
который задаёт список областей доступа для зависимости