feat(F-006): users profile, addresses and RBAC
- users module: profile + address CRUD behind use cases (users_profiles, users_addresses) - roles customer/admin on identity_users; role resolved from DB per request - shared auth contract (Authenticate, requireRole, requireOwnerOrAdmin) injected from composition root; users never imports identity - authorization runs before existence checks; address SQL scoped by user_id - @fastify/cookie registered once at app root (cross-module) - migrations 003_identity_roles + 004_users (reversible) - no new npm dependencies; tests: unit 52, integration 22 Gates: reviewer/security/qa APPROVED; verify.sh green
This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
# Current work
|
||||
|
||||
- Active feature: none (idle)
|
||||
- Last closed: F-005 — Identity: register, login, sessions
|
||||
- Next suggested: F-006 — Users: profile, addresses, RBAC (depends on F-005, satisfied)
|
||||
- Last closed: F-006 — Users: profile, addresses, RBAC
|
||||
- Next suggested: F-007 — check `backlog/features.json` for the first `pending` ticket whose dependencies are satisfied
|
||||
- Runtime status: reset via scripts/agent_status.py
|
||||
- verify.sh: green at close
|
||||
|
||||
## F-005 closure notes
|
||||
- Identity module hexagonal: domain/application/infrastructure/api under src/modules/identity
|
||||
- Sessions server-side: cookie carries opaque 512-bit token; identity_sessions stores only SHA-256 hash
|
||||
- argon2id (OWASP params) behind PasswordHasher port; timing equalized 401 (no enumeration)
|
||||
- Rate limit: 10 consecutive failures per email -> 429 + Retry-After (15 min cooldown), in-memory behind interface
|
||||
- Cookie: HttpOnly + Secure (COOKIE_SECURE, default true) + SameSite=Lax
|
||||
- Migration 002_identity reversible; integration suite updated for full revert (count:0)
|
||||
- Gates: reviewer/security/qa APPROVED. Commits include specs, artifacts, code, docs.
|
||||
## F-006 closure notes
|
||||
- Users module hexagonal: profile + address CRUD behind use cases; tables `users_profiles`, `users_addresses`
|
||||
- Roles customer/admin on `identity_users` (migration 003); role resolved from DB on every request
|
||||
- Shared auth contract (`src/shared/auth.ts`): `Authenticate`, `requireRole`, `requireOwnerOrAdmin` — users never imports identity; composition root injects the authenticator
|
||||
- Authorization runs before existence checks (403 first, no enumeration); address SQL scoped by user_id
|
||||
- `@fastify/cookie` registered once at app root (cross-module infrastructure)
|
||||
- No new npm dependencies; README documents endpoint table, access rules, and new auth codes (UNAUTHORIZED/FORBIDDEN)
|
||||
- Gates: reviewer/security/qa APPROVED. Tests: unit 52, integration 22 (PostgreSQL 16)
|
||||
|
||||
Reference in New Issue
Block a user