From 00964f587ad78fd44b8bfb937b9fcdf2d26fe0d2 Mon Sep 17 00:00:00 2001 From: nns Date: Wed, 27 May 2026 02:42:07 +0500 Subject: [PATCH] docs(sprint1): P0-5 done Co-Authored-By: Claude Opus 4.7 --- docs/sprint1-progress.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/sprint1-progress.md b/docs/sprint1-progress.md index 093a9dc..b1db4b0 100644 --- a/docs/sprint1-progress.md +++ b/docs/sprint1-progress.md @@ -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`, скрипт