8.2 KiB
8.2 KiB
Admin Area Architecture Plan
Overview
Design and implement a clean architecture admin area for Owner and Super Admin roles to manage all users, following TDD principles.
1. Architecture Layers
1.1 Domain Layer (core/admin/domain/)
Purpose: Business logic, entities, value objects, domain services - framework independent
Value Objects:
UserId- Unique identifier for usersEmail- Validated email addressUserRole- Role type (owner, admin, user, etc.)UserStatus- Account status (active, suspended, deleted)PermissionKey- Capability identifierPermissionAction- view | mutate
Entities:
User- Main entity with roles, status, emailPermission- Permission definitionRolePermission- Role to permission mapping
Domain Services:
AuthorizationService- Checks permissions and rolesUserManagementService- User lifecycle management rules
Domain Errors:
UserDomainError- Domain-specific errorsAuthorizationError- Permission violations
1.2 Application Layer (core/admin/application/)
Purpose: Use cases, ports, orchestration - no framework dependencies
Ports (Interfaces):
-
Input Ports:
IManageUsersUseCase- User CRUD operationsIManageRolesUseCase- Role managementIQueryUsersUseCase- User queries
-
Output Ports:
IUserRepository- Persistence interfaceIPermissionRepository- Permission storageIUserPresenter- Output formatting
Use Cases:
ListUsersUseCase- Get all users with filteringGetUserDetailsUseCase- Get single user detailsUpdateUserRolesUseCase- Modify user rolesUpdateUserStatusUseCase- Suspend/activate usersDeleteUserUseCase- Remove user accountsGetUserPermissionsUseCase- View user permissions
Services:
UserManagementService- Orchestrates user operationsPermissionEvaluationService- Evaluates access rights
1.3 Infrastructure Layer (adapters/admin/)
Purpose: Concrete implementations of ports
Persistence:
TypeOrmUserRepository- Database implementationTypeOrmPermissionRepository- Permission storageInMemoryUserRepository- Test implementation
Presenters:
UserPresenter- Maps domain to DTOUserListPresenter- Formats user listPermissionPresenter- Formats permissions
Security:
RolePermissionMapper- Maps roles to permissionsAuthorizationGuard- Enforces access control
1.4 API Layer (apps/api/src/domain/admin/)
Purpose: HTTP delivery mechanism
Controllers:
UsersController- User management endpointsRolesController- Role management endpointsPermissionsController- Permission endpoints
DTOs:
-
Request:
UpdateUserRolesRequestDtoUpdateUserStatusRequestDtoCreateUserRequestDto
-
Response:
UserResponseDtoUserListResponseDtoPermissionResponseDto
Middleware/Guards:
RequireSystemAdminGuard- Validates Owner/Super Admin accessPermissionGuard- Checks specific permissions
1.5 Frontend Layer (apps/website/)
Purpose: User interface for admin operations
Pages:
/admin/users- User management dashboard/admin/users/[id]- User detail page/admin/roles- Role management/admin/permissions- Permission matrix
Components:
UserTable- Display users with filtersUserDetailCard- User information displayRoleSelector- Role assignment UIStatusBadge- User status displayPermissionMatrix- Permission management
API Clients:
AdminUsersApiClient- User management API callsAdminRolesApiClient- Role management API calls
Hooks:
useAdminUsers- User data managementuseAdminPermissions- Permission data
2. Authorization Model
2.1 System Roles (from AUTHORIZATION.md)
owner- Full system accessadmin- System admin access
2.2 Permission Structure
capabilityKey.actionType
Examples:
users.list+viewusers.roles+mutateusers.status+mutate
2.3 Role → Permission Mapping
owner: all permissions
admin:
- users.view
- users.list
- users.roles.mutate
- users.status.mutate
3. TDD Implementation Strategy
3.1 Test-First Approach
- Write failing test for domain entity/value object
- Implement minimal code to pass test
- Refactor while keeping tests green
- Repeat for each layer
3.2 Test Structure
core/admin/
├── domain/
│ ├── entities/
│ │ ├── User.test.ts
│ │ └── Permission.test.ts
│ ├── value-objects/
│ │ ├── UserId.test.ts
│ │ ├── Email.test.ts
│ │ ├── UserRole.test.ts
│ │ └── UserStatus.test.ts
│ └── services/
│ ├── AuthorizationService.test.ts
│ └── UserManagementService.test.ts
├── application/
│ ├── use-cases/
│ │ ├── ListUsersUseCase.test.ts
│ │ ├── UpdateUserRolesUseCase.test.ts
│ │ └── UpdateUserStatusUseCase.test.ts
│ └── services/
│ └── UserManagementService.test.ts
3.3 Integration Tests
- API endpoint tests
- End-to-end user management flows
- Authorization guard tests
4. Implementation Phases
Phase 1: Domain Layer (TDD)
- Value objects with tests
- Entities with tests
- Domain services with tests
Phase 2: Application Layer (TDD)
- Ports/interfaces
- Use cases with tests
- Application services
Phase 3: Infrastructure Layer (TDD)
- Repository implementations
- Presenters
- Authorization guards
Phase 4: API Layer (TDD)
- Controllers
- DTOs
- Route definitions
Phase 5: Frontend Layer
- Pages
- Components
- API clients
- Integration tests
Phase 6: Integration & Verification
- End-to-end tests
- Authorization verification
- TDD compliance check
5. Key Clean Architecture Rules
- Dependency Direction: API → Application → Domain
- No Framework Dependencies: Domain/Application layers pure TypeScript
- Ports & Adapters: Clear interfaces between layers
- Test Coverage: All layers tested before implementation
- Single Responsibility: Each use case does one thing
6. User Management Features
6.1 List Users
- Filter by role, status, email
- Pagination support
- Sort by various fields
6.2 User Details
- View user information
- See assigned roles
- View account status
- Audit trail
6.3 Role Management
- Add/remove roles
- Validate role assignments
- Prevent privilege escalation
6.4 Status Management
- Activate/suspend users
- Soft delete support
- Status history
6.5 Permission Management
- View user permissions
- Role-based permission matrix
- Permission validation
7. Security Considerations
7.1 Access Control
- Only Owner/Admin can access admin area
- Validate permissions on every operation
- Audit all changes
7.2 Data Protection
- Never expose sensitive data
- Validate all inputs
- Prevent self-modification of critical roles
7.3 Audit Trail
- Log all user management actions
- Track who changed what
- Maintain history of changes
8. API Endpoints
8.1 User Management
GET /api/admin/users
GET /api/admin/users/:id
PUT /api/admin/users/:id/roles
PUT /api/admin/users/:id/status
DELETE /api/admin/users/:id
8.2 Role Management
GET /api/admin/roles
GET /api/admin/roles/:id
POST /api/admin/roles
PUT /api/admin/roles/:id
DELETE /api/admin/roles/:id
8.3 Permission Management
GET /api/admin/permissions
GET /api/admin/permissions/:roleId
PUT /api/admin/permissions/:roleId
9. Frontend Routes
/admin/users - User list
/admin/users/:id - User detail
/admin/roles - Role management
/admin/permissions - Permission matrix
10. Success Criteria
- All domain logic tested with TDD
- All application use cases tested
- API endpoints tested with integration tests
- Frontend components work correctly
- Authorization works for Owner and Super Admin only
- Clean architecture boundaries maintained
- No circular dependencies
- All tests pass
- Code follows project conventions