Commit Graph
3 Commits
Author SHA1 Message Date
Andrey 9a701a354b fix(design): remove old, add new baseline 2026-07-13 07:27:18 +03:00
AndreyandClaude Opus 4.8 389e1e0710 ✨ feat(identity): административная иерархия OWNER/ADMIN и передача владения (ADR-HUB-0027 этап 2)
Единая target-aware policy can_manage_employee(actor, target, action) и can_create_role
(governance.py) по матрице SPEC-HUB-0016 §8: OWNER управляет ADMIN и EMPLOYEE, ADMIN —
только EMPLOYEE, смена роли и передача владения — только OWNER.

Роль ADMIN активирована: is_manager/IsManager, обычные capability уровня организации
открыты OWNER и ADMIN (каналы, AI, интеграции, продукты, заказы, корректировки продаж,
контракты поддержки, командный центр, звонки, уведомления). Governance-действия над
привилегированными целями остаются за OWNER.

Employee endpoints переведены на governance: create ADMIN/EMPLOYEE по policy, update
делит проверки profile/role/placement, block/unblock/reset/terminate — через
can_manage_employee с аудитом отказа. Новый атомарный OwnershipTransferView сохраняет
инвариант ровно одного владельца (понижение прежнего перед промоутом, row-lock).
Аудит по SPEC-HUB-0016 §16; payload отдаёт per-actor permissions.

Frontend: ADMIN получает доступ уровня владельца (access.ts + тесты), действия над
сотрудником скрываются по backend permissions. UI передачи владения не проектируется
до утверждения design gate (SPEC-HUB-0016 §14).

Проверено полным backend-suite в Docker (293 tests, OK), typecheck и vitest.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 00:50:42 +03:00
AndreyandClaude Opus 4.8 bd9f77cc07 ♻️ refactor(api): adopt DRF foundation and migrate products module
- DRF defaults: SessionAuthentication, IsAuthenticated, JSON-only render/parse
- shared api package: IsOwner permission (audits denials) and an exception
  handler that flattens every error body to the {detail} SPA contract
- products views rewritten as APIView with permission_classes; manual JSON
  parsing and auth checks removed (DRF parser returns 400 on bad JSON)
- response shapes and status codes preserved; product tests use DRF APIClient

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 17:50:40 +03:00