docs(sprint1): P0-5 done

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-27 02:42:07 +05:00
parent 688be30226
commit 00964f587a

View file

@ -20,9 +20,16 @@
healthcheck на `/health/ready`, web ждёт api `service_healthy`. `/health` оставлен для
совместимости. Прим.: startup `Migrate()` — fail-fast при DB-down на буте (вне scope, compose
гейтит api на `postgres: service_healthy`).
3. [ ] **P0-5 Permission-based authz**`PermissionHandler` + `[RequiresPermission("...")]`
3. [x] **P0-5 Permission-based authz**`PermissionHandler` + `[RequiresPermission("...")]`
читающий флаги `RolePermissions`. Заменить `[Authorize(Roles=...)]` в каталоге/документах.
E2E: кастомная роль без `ProductsEdit` → 403 на PUT товара.
`PermissionAuthorizationHandler` (live из БД: Employee→EmployeeRole→Permissions) +
`RequiresPermissionAttribute` + динамический `PermissionAuthorizationPolicyProvider`
(policy `perm:*`). SuperAdmin/Identity-Admin — full-access шорткат (custom-роли не маппятся
на Admin). Заменены role-гейты в 8 catalog + 2 document контроллерах (Currencies/Countries
оставлены SuperAdmin — глобальный справочник). Закрывает «роли — фикция» из аудита.
Проверка: curl на :5091 (403/200/400) + e2e `roles` step08 — зелёный 8/8.
Rate-limit стал конфигурируемым (`RateLimiting:*`) — иначе повторные логины тестов → 429.
4. [ ] **P0-1 OpenIddict prod-ключи** — signing+encryption сертификаты из пути в конфиге,
persistent self-signed если файла нет. Dev-поведение не ломать. Документировать.
5. [ ] **P0-6 Авто-бэкап**`deploy/food-market-backup.service` + `.timer`, скрипт