Metadata-Version: 2.4
Name: fastapi-iam-client
Version: 1.0.0
Summary: Библиотека для интеграции FastAPI-сервисов с IAM и проверки прав доступа пользователей
Requires-Python: >=3.12
Description-Content-Type: text/markdown
Requires-Dist: fastapi>=0.115
Requires-Dist: httpx>=0.27

# user-permissions-lib

### Интеграция в FastAPI сервис

#### --1--

Добавить константы в `.env`:
```bash
SERVICE_CODE            # кодовое имя текущего сервиса (обычно совпадает с названием репозитория)
SERVICE_NAME            # человекочитаемое название сервиса
SERVICE_DESCRIPTION     # короткое описание сервиса
IAM_API_URL             # url адрес IAM сервиса (http://auth-api:8000)
```

#### --2--

В файл запуска приложения `main.py` импортировать `create_lifespan` и добавить его в приложение:
```python
... # импорт fastapi и констант .env
from fastapi_iam_client import create_lifespan

app = FastAPI(
    lifespan=create_lifespan(
        code=SERVICE_CODE,
        name=SERVICE_NAME,
        description=SERVICE_DESCRIPTION,
        iam_url=f'{IAM_API_URL}/permissions/register',
    )
)
```

#### --3--

В файл `dependencies.py` добавить объект проверки прав:
```python
... # импорт fastapi и констант .env
from fastapi_iam_client import create_check_permissions

check_permissions = create_check_permissions(
    SERVICE_CODE, f'{IAM_API_URL}/permissions/check'
)
```

#### --4--

В нужные эндпоинты добавить декоратор `@permissions` и зависимость `check_permissions`:
```python
... # импорты
from fastapi_iam_client import permissions

from src.dependencies import check_permissions


@permissions(name='name')
@router.get('/', dependencies=[Depends(check_permissions)])
def get():
    pass
```

Для проверки прав с фильтрацией дополнительно импортировать `check_filters`:
```python
... # импорты
from fastapi import Request
from fastapi_iam_client import permissions

from src.dependencies import check_permissions


@permissions(name='name', filters=['one'])
@router.get('/', dependencies=[Depends(check_permissions)])
def get(request: Request):
    if check_filters('one', request):
        return 1
    return 2
```

## Команды обновления библиотеки

Установка инструментария
```bash
python -m pip install --upgrade build twine
```
Сборка пакета
```bash
python -m build
```
Проверка, что всё ок собралось
```bash
python -m twine check dist/*
```
Залить на PyPI.org
```bash
python -m twine upload dist/*
```
Залить на локальный Git
```bash
python -m twine upload --repository-url http://{address}/api/packages/{owner}/pypi dist/*
```
