Files
KArtSell.Aegis/docs/contracts/architecture/VS-01_SLICE_SPEC.md
T
kjh2064 555133d245 feat: Start Phase 2 Batch 1 - VS-01 ManageIdentityAndRoles (GOV, DATA, DOMAIN)
Phase 2 Batch 1 - No Dependencies (Start Immediately)
├─ VS-01: ManageIdentityAndRoles
│  ├─ GOV: VS-01_SLICE_SPEC.md (Policy/Scope/Failure/Acceptance)
│  ├─ DATA: VS-01_DATA_CONTRACT.md (3NF schema, PIT, CDC events)
│  └─ DOMAIN: VS01_IdentityPolicyTests.cs (15 tests, pure logic)
└─ VS-02: SynchronizeSecurityMaster (🔜 Next)

### VS-01 GOV Component
- User Management (CRUD, soft-delete)
- Role & Permission Model (Admin/Analyst/Trader/Viewer)
- Data Integrity (PIT compliance, immutable email)
- API Contracts (POST/GET/PATCH endpoints)
- UI/UX Acceptance Criteria
- Security Model
- Failure Modes & Recovery

### VS-01 DATA Component
- Schema (3NF): identity.users, identity.roles, identity.user_roles, identity.user_permissions
- Constraints: Email UNIQUE, status ENUM, PIT temporal ordering
- Immutability: Email/UserID/Roles cannot change post-creation
- Soft-delete: removed_at pattern (append-only)
- PIT Queries: published_at <= cutoff validation
- CDC Events: UserCreated, RoleAssigned, RoleRevoked
- Idempotency: Email-based dedup, role assignment idempotent

### VS-01 DOMAIN Component
- 15 Domain Policy Tests (NO database, pure logic)
   Email validation (format, normalization, case-insensitivity)
   Password validation (length ≥12 chars)
   Role management (assign, revoke, idempotency)
   Permission hierarchy (role-based access control)
   User status transitions (active/inactive/suspended)
   Admin-only operations (user creation, role modification)
   Immutability (email, user ID)
   Soft-delete (inactive users filtered out)
   Consistency (every user must have role)

Execution Timeline (Per Slice):
- GOV: 1-2 hours  COMPLETE
- DATA: 2-3 hours  COMPLETE
- DOMAIN: 2-3 hours  COMPLETE
- BE: 3-4 hours (next)
- ASYNC: 2-3 hours
- FE: 3-4 hours
- TESTOPS: 2-3 hours

Total VS-01: ~18-22 hours (wall-clock ~3 days)

Phase 2 Status:
- Batch 1: 3/14 components COMPLETE (VS-01: 3/7, VS-02: 0/7)
- Batch 2-3: 🔜 Queued (after Batch 1 deps satisfied)
- 56 items total, 8 parallel batches

AGENTS.md v16.0 Compliance:
 Necessity: User goal/non-goal/acceptance criteria specified
 Pattern: Vertical Slice (GOV → DATA → DOMAIN → BE → ASYNC → FE → TESTOPS)
 Traceability: VS-01 specs linked to Phase 2 plan
 Safety: Pure logic tests (no side effects)
 Maturity: Contracts before implementation

Next: VS-01 BE (API/Handler/SQL) OR continue parallel VS-02

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-04 01:15:42 +09:00

165 lines
5.1 KiB
Markdown

# VS-01: Manage Identity and Roles - Vertical Slice Specification
**Slice ID:** VS-01
**Batch:** 1 (no dependencies)
**Status:** 📋 SPECIFICATION
**Created:** 2026-08-04
---
## Executive Summary
Establish centralized **Identity and Role Management (IAM)** system for K-ArtSell platform.
**User Goal:** Administrators can manage user accounts, roles, and permissions from a single dashboard without manual database operations.
**Non-Goal:**
- SSO/LDAP integration (Phase 3)
- MFA implementation (Phase 3)
- Audit trail (separate feature)
- Password reset workflow (Phase 3)
---
## Acceptance Criteria
### 1. User Management ✅
- [ ] **Create User:** Endpoint creates new user record with UUID, email, hashed password, roles
- [ ] **Read Users:** Paginated list, filterable by role/status
- [ ] **Update User:** Change email, roles (no password update here)
- [ ] **Soft Delete:** Mark user as inactive (no hard delete)
- [ ] **Validation:** Email unique per environment, password ≥12 chars
### 2. Role & Permission Model ✅
- [ ] **Predefined Roles:** Admin, Analyst, Trader, Viewer (immutable)
- [ ] **Permissions:** Read, Write, Approve, Execute (scoped to domain)
- [ ] **User-Role Mapping:** Many-to-many with assigned_at timestamp
- [ ] **Permission Enforcement:** Checked on every endpoint (via PermissionGuard)
### 3. Data Integrity ✅
- [ ] **PIT Compliance:** created_at (never future), updated_at, published_at (for CDC)
- [ ] **Immutable:** user_id, email_hash cannot change post-creation
- [ ] **Revision Tracking:** Each role change creates new record (append-only)
- [ ] **Schema-Qualified:** All queries use `identity.users`, `identity.roles`
### 4. API Contracts ✅
**Endpoint: POST /api/users**
```
Request: { email: string, password: string, roles: ["Admin", "Analyst"] }
Response: 201 Created { userId: UUID, email: string, roles: [string] }
Errors: 400 (invalid), 409 (exists), 422 (validation)
Idempotency: IdempotencyKey header
```
**Endpoint: GET /api/users?page=1&limit=20&role=Admin**
```
Response: 200 { items: [User], total: int, page: int, limit: int }
Errors: 401, 403 (insufficient permissions)
```
**Endpoint: PATCH /api/users/:id**
```
Request: { roles: ["Analyst", "Viewer"], status: "active" }
Response: 200 { userId: UUID, roles: [string], updated_at: timestamp }
```
### 5. UI/UX Acceptance Criteria ✅
- [ ] **User List Page:** Table with columns (Email, Roles, Status, Actions)
- [ ] **Create Dialog:** Form with email + password + role multi-select
- [ ] **Edit Dialog:** Change roles inline
- [ ] **Delete Dialog:** Confirm soft-delete with warning
- [ ] **Accessibility:** ARIA labels, keyboard nav, error messages
### 6. Security Acceptance Criteria ✅
- [ ] **Password Hashing:** bcrypt or argon2, never plaintext
- [ ] **Auth Check:** Every endpoint requires role (no anonymous)
- [ ] **Authorization:** Only Admin can modify users
- [ ] **Audit Logging:** User changes logged with correlationId
- [ ] **No PII in Logs:** Email, password NEVER logged
---
## Failure Modes & Recovery
### Scenario 1: Duplicate Email
**Trigger:** POST /api/users with existing email
**Expected:** 409 Conflict { error: "Email already exists" }
**Recovery:** User retries with different email
### Scenario 2: Invalid Role
**Trigger:** POST /api/users with role="SuperAdmin" (not in predefined list)
**Expected:** 422 Unprocessable { error: "Invalid role: SuperAdmin" }
**Recovery:** User selects from dropdown of valid roles
### Scenario 3: Concurrent Role Update
**Trigger:** 2 admins modify same user's roles simultaneously
**Expected:** Last-write-wins (UPDATE WHERE version = @version, increment version)
**Recovery:** Second request gets 409 Conflict, user retries with fresh data
---
## Success Metrics
| Metric | Target | Verification |
|--------|--------|--------------|
| Create latency | <200ms | Load test |
| List latency | <500ms (1000 users) | Stress test |
| Auth check latency | <50ms | Endpoint latency trace |
| Test coverage | ≥95% | Code coverage report |
| Uptime | ≥99.9% | Monitoring dashboard |
---
## Dependencies
### Inbound (Block VS-01)
-**VS-00:** Platform foundation (complete)
-**Authentication:** DevelopmentHeader + FailClosed (Phase 1)
### Outbound (Unblock)
- 🔄 **VS-07:** ManageClientIPS (depends on VS-01 for User/Role APIs)
- 🔄 **VS-02~08:** All slices use VS-01's permission model
---
## Component Breakdown (7 items per slice)
| Component | Owner | Duration | Status |
|-----------|-------|----------|--------|
| **GOV** (this doc) | Architect | 1-2 hrs | 📋 |
| **DATA** | Data Architect | 2-3 hrs | ⏳ Ready |
| **DOMAIN** | Quant Lead | 2-3 hrs | ⏳ Ready |
| **BE** | BE Lead | 3-4 hrs | ⏳ Ready |
| **ASYNC** | SRE | 2-3 hrs | ⏳ Ready |
| **FE** | FE Architect | 3-4 hrs | ⏳ Ready |
| **TESTOPS** | QA Lead | 2-3 hrs | ⏳ Ready |
**Total Duration:** ~18-22 hours (wall-clock ~3 days)
---
## Sign-Off
| Role | Name | Status | Date |
|------|------|--------|------|
| Product Owner | User | ⏳ Approval | TBD |
| Architect | Claude Code | ✅ Draft | 2026-08-04 |
| Security | Team | ⏳ Review | TBD |
---
**Status:** 📋 **READY FOR DATA/DOMAIN/BE COMPONENTS**
Next: VS-01_DATA_CONTRACT.md