Expose PUT /api/service/project-members for external apps that authenticate with only the API key, reusing portal validation while keeping acting-based writes unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
26 lines
2.0 KiB
Markdown
26 lines
2.0 KiB
Markdown
## Why
|
||
|
||
Внешние приложения должны заводить уже существующего сотрудника Merakomis в конкретный проект с разделом и ролью, но текущий `PUT /api/project-members` требует `X-Acting-Emp-Id` и портальные права `isRwMember`. Service-to-service интеграция с одним API-ключом не может выполнить эту операцию.
|
||
|
||
## What Changes
|
||
|
||
- Добавить отдельный service-эндпоинт `PUT /api/service/project-members` для upsert участника команды проекта.
|
||
- Авторизация только по API-ключу (`X-Api-Key` / Bearer); **без** `X-Acting-Emp-Id` и без проверки `Rules::isRwMember`.
|
||
- Тело и валидации как у существующего `PUT /api/project-members`: `project_id`, `emp_id`, `section_id`, `role`, опционально `active` и `text`.
|
||
- Существующий `PUT /api/project-members` (с acting) **не меняется**.
|
||
- Обновить документацию API (`docs/user-reader-api.md`, при необходимости `DEVELOPERS.md`).
|
||
|
||
## Capabilities
|
||
|
||
### New Capabilities
|
||
- `service-project-members`: service-to-service запись участника проекта (upsert TeamMember) только по API-ключу
|
||
|
||
### Modified Capabilities
|
||
|
||
## Impact
|
||
|
||
- Код: `services/user-reader` — новый роут (или расширение write-модуля), переиспользование `validate_member_write` / `upsert_team_member`
|
||
- API: новый путь `/api/service/project-members`; матрица доступа в docs
|
||
- Безопасность: доверие к владельцу API-ключа (полный write состава без impersonation)
|
||
- Клиенты: внешние приложения; портальный UI и acting-поток не затрагиваются
|