meraproject/openspec/changes/archive/2026-07-14-service-project-members/proposal.md
keboss-m a7f3df859a Add service API for assigning employees to project teams.
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>
2026-07-14 15:30:59 +03:00

26 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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-поток не затрагиваются