2076 lines
32 KiB
Markdown
2076 lines
32 KiB
Markdown
# Phase 0 – Architecture Audit
|
||
|
||
## Part 1 – Context, Current Status & Audit Foundation
|
||
|
||
> **Project:** Training Management System (TMS)
|
||
>
|
||
> **Phase:** Phase 0 – Architecture Audit
|
||
>
|
||
> **Objective:** Validate Architecture Readiness Before Permission-first Migration
|
||
|
||
---
|
||
|
||
# Background
|
||
|
||
ระบบ Training Management System (TMS) กำลังอยู่ในช่วงเปลี่ยนผ่านจาก **Role-based Authorization** ไปสู่ **Permission-first Authorization Architecture**
|
||
|
||
ในปัจจุบัน ระบบมี Foundation สำหรับ Permission-first แล้วบางส่วน แต่ยังอยู่ใน **Compatibility Mode**
|
||
|
||
หมายความว่า Feature หลายส่วนของระบบยังคงใช้แนวคิดเดิม เช่น
|
||
|
||
- `businessRole`
|
||
- `membership.role`
|
||
- `systemRole`
|
||
- `isHRD()`
|
||
- `isIT()`
|
||
- `requireHRD()`
|
||
- `requireIT()`
|
||
|
||
ขณะที่ Foundation ใหม่เริ่มถูกสร้างแล้ว เช่น
|
||
|
||
- Permission Catalog
|
||
- Permission Helpers
|
||
- Effective Permission Resolver
|
||
- Session Permission Resolution
|
||
- Permission Template Schema
|
||
- Permission Assignment Schema
|
||
- Permission Override Schema
|
||
|
||
ดังนั้น เป้าหมายของ Phase นี้คือ
|
||
|
||
> **ตรวจสอบความพร้อมของ Foundation ทั้งหมดก่อนเริ่ม Migration ของ Feature**
|
||
|
||
---
|
||
|
||
# Current Project Status
|
||
|
||
สถานะปัจจุบันของระบบโดยสรุป
|
||
|
||
## Completed
|
||
|
||
Foundation ที่มีอยู่แล้ว
|
||
|
||
- Central Permission Catalog
|
||
- Authorization Helper
|
||
- Session Permission Resolver
|
||
- Effective Permission Resolution
|
||
- Database Schema สำหรับ Permission Template
|
||
- Permission Assignment
|
||
- Permission Override
|
||
- Permission Audit Log
|
||
- Compatibility Layer สำหรับระบบเดิม
|
||
|
||
## In Progress
|
||
|
||
อยู่ระหว่าง Migration
|
||
|
||
- Navigation
|
||
- Page Guard
|
||
- Route Handlers
|
||
- Feature Authorization
|
||
- Permission Template Service
|
||
- Assignment Service
|
||
|
||
## Not Started
|
||
|
||
ยังไม่มีการพัฒนา
|
||
|
||
- Permission Template Administration UI
|
||
- User Permission Assignment UI
|
||
- Permission Override UI
|
||
- Effective Permission Viewer
|
||
- Compatibility Cleanup
|
||
- Legacy Removal
|
||
|
||
---
|
||
|
||
# Purpose Of Phase 0
|
||
|
||
Phase นี้มีหน้าที่เพียงอย่างเดียวคือ
|
||
|
||
> **Audit + Validate + Assess + Report**
|
||
|
||
ไม่ใช่
|
||
|
||
> Refactor
|
||
|
||
ไม่ใช่
|
||
|
||
> Rewrite
|
||
|
||
ไม่ใช่
|
||
|
||
> Feature Development
|
||
|
||
---
|
||
|
||
# Expected Outcome
|
||
|
||
เมื่อจบ Phase นี้
|
||
|
||
ทีมพัฒนาต้องสามารถตอบคำถามต่อไปนี้ได้อย่างชัดเจน
|
||
|
||
- Foundation พร้อมหรือไม่
|
||
- Permission Model สมบูรณ์หรือไม่
|
||
- Session สามารถใช้เป็น Source of Truth ได้หรือไม่
|
||
- Effective Permission ถูกต้องหรือไม่
|
||
- Multi-Organization พร้อมหรือไม่
|
||
- Compatibility Layer เพียงพอหรือไม่
|
||
- Feature ใดสามารถเริ่ม Migration ได้ก่อน
|
||
- Feature ใดมีความเสี่ยงสูง
|
||
- มี Technical Debt อะไรค้างอยู่
|
||
- มี Architecture Smell หรือไม่
|
||
|
||
---
|
||
|
||
# Architecture Direction
|
||
|
||
Architecture ใหม่ของระบบต้องยึดตามโครงสร้างนี้
|
||
|
||
```text
|
||
Organization
|
||
│
|
||
▼
|
||
Permission Template
|
||
│
|
||
▼
|
||
Template Permissions
|
||
│
|
||
▼
|
||
User Template Assignment
|
||
│
|
||
▼
|
||
User Permission Override
|
||
│
|
||
▼
|
||
Effective Permissions
|
||
│
|
||
▼
|
||
Authorization Helpers
|
||
│
|
||
▼
|
||
API / Server
|
||
│
|
||
▼
|
||
Page Guard
|
||
│
|
||
▼
|
||
Navigation
|
||
│
|
||
▼
|
||
UI Visibility
|
||
```
|
||
|
||
ทุก Feature ใหม่
|
||
|
||
ต้องอ้างอิง Architecture นี้เท่านั้น
|
||
|
||
---
|
||
|
||
# Source Of Truth
|
||
|
||
ภายหลังการ Migration
|
||
|
||
Source Of Truth ต้องมีเพียงชุดเดียว
|
||
|
||
```text
|
||
Effective Permissions
|
||
```
|
||
|
||
ระบบทั้งหมด
|
||
|
||
ห้ามตรวจสอบสิทธิ์จาก
|
||
|
||
- businessRole
|
||
- membership.role
|
||
- systemRole
|
||
- isHRD()
|
||
- isIT()
|
||
|
||
โดยตรงอีก
|
||
|
||
Field เหล่านี้สามารถมีอยู่ได้
|
||
|
||
แต่มีไว้เพื่อ Compatibility เท่านั้น
|
||
|
||
---
|
||
|
||
# Scope Of Audit
|
||
|
||
Phase นี้ต้องตรวจสอบทุก Layer ของระบบ
|
||
|
||
ประกอบด้วย
|
||
|
||
## Architecture Layer
|
||
|
||
- Authorization Architecture
|
||
- Permission Architecture
|
||
- Session Architecture
|
||
- Organization Architecture
|
||
|
||
## Database Layer
|
||
|
||
- Schema
|
||
- Migration
|
||
- Foreign Keys
|
||
- Indexes
|
||
- Constraints
|
||
|
||
## Backend Layer
|
||
|
||
- Auth
|
||
- Session
|
||
- Permission Helpers
|
||
- Route Handlers
|
||
- Services
|
||
|
||
## Frontend Layer
|
||
|
||
- Navigation
|
||
- Page Guards
|
||
- Feature Visibility
|
||
- Permission Context
|
||
|
||
## Security Layer
|
||
|
||
- Authorization
|
||
- Privilege Escalation
|
||
- Cross Organization Access
|
||
- Permission Leak
|
||
|
||
## Performance Layer
|
||
|
||
- Permission Resolution
|
||
- Database Query
|
||
- Cache
|
||
- Session Size
|
||
|
||
---
|
||
|
||
# Audit Philosophy
|
||
|
||
การตรวจสอบครั้งนี้
|
||
|
||
ห้ามเริ่มจาก
|
||
|
||
> "จะเปลี่ยนอะไร"
|
||
|
||
แต่ต้องเริ่มจาก
|
||
|
||
> "ระบบปัจจุบันทำอะไรอยู่"
|
||
|
||
ก่อน
|
||
|
||
หลังจากนั้น
|
||
|
||
จึงประเมินว่า
|
||
|
||
- สิ่งใดใช้ต่อได้
|
||
- สิ่งใดต้อง Refactor
|
||
- สิ่งใดควรลบ
|
||
- สิ่งใดควรสร้างใหม่
|
||
|
||
ห้ามสร้าง Component
|
||
|
||
Helper
|
||
|
||
Service
|
||
|
||
หรือ Model ใหม่
|
||
|
||
หากของเดิมสามารถ Reuse ได้
|
||
|
||
---
|
||
|
||
# Audit Principles
|
||
|
||
การตรวจสอบทุกหัวข้อ
|
||
|
||
ต้องยึดหลัก
|
||
|
||
## Reuse First
|
||
|
||
ตรวจสอบของเดิมก่อน
|
||
|
||
ห้ามสร้างใหม่ทันที
|
||
|
||
---
|
||
|
||
## Evidence Based
|
||
|
||
ห้ามคาดเดา
|
||
|
||
ทุกข้อสรุปต้องอ้างอิงจากโค้ดจริง
|
||
|
||
---
|
||
|
||
## Compatibility First
|
||
|
||
ห้ามเสนอแนวทาง
|
||
|
||
ที่ทำให้ระบบเดิมใช้งานไม่ได้
|
||
|
||
---
|
||
|
||
## Incremental Migration
|
||
|
||
ทุก Feature
|
||
|
||
ต้องสามารถย้ายทีละส่วนได้
|
||
|
||
โดยไม่ต้อง Rewrite ทั้งระบบ
|
||
|
||
---
|
||
|
||
## Security First
|
||
|
||
UI
|
||
|
||
ไม่ใช่ Security
|
||
|
||
Authorization
|
||
|
||
ต้องตรวจที่ Server เสมอ
|
||
|
||
---
|
||
|
||
## Single Source Of Truth
|
||
|
||
Effective Permissions
|
||
|
||
คือแหล่งข้อมูลสิทธิ์เพียงชุดเดียว
|
||
|
||
ทุก Layer
|
||
|
||
ต้องอ้างอิงจากข้อมูลชุดเดียวกัน
|
||
|
||
---
|
||
|
||
# Important Rules
|
||
|
||
Phase นี้
|
||
|
||
ห้ามทำสิ่งต่อไปนี้
|
||
|
||
- ห้าม Refactor Feature
|
||
- ห้ามแก้ Business Logic
|
||
- ห้ามแก้ Workflow
|
||
- ห้ามเพิ่ม Feature ใหม่
|
||
- ห้ามเปลี่ยน Database Schema
|
||
- ห้ามลบ Legacy Code
|
||
- ห้ามลบ businessRole
|
||
- ห้ามลบ membership.role
|
||
- ห้ามลบ isHRD()
|
||
- ห้ามลบ isIT()
|
||
- ห้ามลบ requireHRD()
|
||
- ห้ามลบ requireIT()
|
||
|
||
หากพบปัญหา
|
||
|
||
ให้บันทึกไว้ในรายงาน
|
||
|
||
ห้ามแก้ไขทันที
|
||
|
||
---
|
||
|
||
# End Of Section A
|
||
|
||
หลังจบ Section นี้
|
||
|
||
ให้รอ Section B ก่อนดำเนินการตรวจสอบเชิงลึกต่อ
|
||
|
||
# Phase 0 – Architecture Audit
|
||
|
||
## Part 1 – Section B
|
||
|
||
### Audit Objectives, Repository Inspection Strategy & Readiness Assessment
|
||
|
||
> **Objective**
|
||
>
|
||
> กำหนดมาตรฐานการตรวจสอบ (Audit Standard) เพื่อประเมินว่าโปรเจกต์มีความพร้อมสำหรับการ Migration ไปสู่ Permission-first Architecture หรือไม่
|
||
|
||
---
|
||
|
||
# Primary Objectives
|
||
|
||
Phase 0 มีเป้าหมายหลักเพียงข้อเดียว
|
||
|
||
> **ยืนยันว่า Foundation ของระบบมีความถูกต้อง แข็งแรง และพร้อมสำหรับการ Migration ใน Phase ถัดไป**
|
||
|
||
Codex ต้องไม่เริ่มจากการแก้ไขโค้ด
|
||
|
||
แต่ต้องตอบคำถามต่อไปนี้ให้ได้ก่อน
|
||
|
||
- Foundation พร้อมหรือยัง
|
||
- โครงสร้างปัจจุบันมีข้อขัดแย้งกับ Permission-first หรือไม่
|
||
- มีส่วนใดที่สามารถ Reuse ได้
|
||
- มีส่วนใดที่ควร Refactor
|
||
- มีส่วนใดที่ควรเลิกใช้ (Deprecated)
|
||
- มีส่วนใดที่ยังขาดอยู่
|
||
- หากเริ่ม Migration ตอนนี้ จะมีความเสี่ยงอะไรบ้าง
|
||
|
||
---
|
||
|
||
# Audit Strategy
|
||
|
||
การตรวจสอบต้องทำจาก "แกนกลาง" ออกไปยัง Feature
|
||
|
||
ลำดับการตรวจต้องเป็นดังนี้
|
||
|
||
```text
|
||
Architecture
|
||
|
||
↓
|
||
|
||
Database
|
||
|
||
↓
|
||
|
||
Authentication
|
||
|
||
↓
|
||
|
||
Authorization
|
||
|
||
↓
|
||
|
||
Session
|
||
|
||
↓
|
||
|
||
Permission Resolution
|
||
|
||
↓
|
||
|
||
Navigation
|
||
|
||
↓
|
||
|
||
Page Guard
|
||
|
||
↓
|
||
|
||
API
|
||
|
||
↓
|
||
|
||
Feature Server
|
||
|
||
↓
|
||
|
||
Feature UI
|
||
|
||
↓
|
||
|
||
Reports
|
||
```
|
||
|
||
ห้ามเริ่มตรวจจากหน้า UI ก่อน
|
||
|
||
เนื่องจาก UI ไม่ใช่ Source of Truth
|
||
|
||
---
|
||
|
||
# Repository Inspection Rules
|
||
|
||
ก่อนวิเคราะห์หรือเสนอแนวทางใด ๆ
|
||
|
||
ต้องตรวจสอบ Repository จริงก่อนเสมอ
|
||
|
||
ห้ามสมมติว่า
|
||
|
||
- มี Service
|
||
- มี Helper
|
||
- มี Component
|
||
- มี Hook
|
||
- มี Model
|
||
|
||
หากยังไม่ได้ตรวจสอบ
|
||
|
||
---
|
||
|
||
## Required Inspection
|
||
|
||
ทุก Layer ต้องตรวจอย่างน้อย
|
||
|
||
### Database
|
||
|
||
- Schema
|
||
- Enum
|
||
- Tables
|
||
- Foreign Keys
|
||
- Constraints
|
||
- Migration Files
|
||
- Seed Strategy
|
||
|
||
---
|
||
|
||
### Authentication
|
||
|
||
- auth.ts
|
||
- session callback
|
||
- JWT callback
|
||
- next-auth types
|
||
- organization context
|
||
|
||
---
|
||
|
||
### Authorization
|
||
|
||
- permissions.ts
|
||
- authorization.ts
|
||
- roles.ts
|
||
- session.ts
|
||
|
||
---
|
||
|
||
### Navigation
|
||
|
||
- nav-config.ts
|
||
- use-nav.ts
|
||
- sidebar
|
||
- menu visibility
|
||
|
||
---
|
||
|
||
### Page Guard
|
||
|
||
- dashboard guards
|
||
- route guards
|
||
- middleware
|
||
|
||
---
|
||
|
||
### API
|
||
|
||
ทุก Route
|
||
|
||
ต้องตรวจว่า
|
||
|
||
ใช้
|
||
|
||
```text
|
||
requirePermission()
|
||
|
||
หรือ
|
||
|
||
requireHRD()
|
||
|
||
หรือ
|
||
|
||
isHRD()
|
||
```
|
||
|
||
---
|
||
|
||
### Feature Layer
|
||
|
||
ตรวจทุก Module
|
||
|
||
เช่น
|
||
|
||
- Announcements
|
||
- Online Lessons
|
||
- Training Records
|
||
- Reports
|
||
- Employee Directory
|
||
- Courses
|
||
- Users
|
||
- Notifications
|
||
|
||
---
|
||
|
||
# Architecture Validation Matrix
|
||
|
||
ทุก Layer ต้องถูกประเมินด้วยเกณฑ์เดียวกัน
|
||
|
||
| Category | ตรวจสอบ |
|
||
| -------------- | --------------------------------- |
|
||
| Responsibility | Layer นี้มีหน้าที่ชัดเจนหรือไม่ |
|
||
| Coupling | พึ่งพา Layer อื่นมากเกินไปหรือไม่ |
|
||
| Duplication | Logic ซ้ำหรือไม่ |
|
||
| Compatibility | รองรับ Migration หรือไม่ |
|
||
| Extensibility | เพิ่ม Feature ใหม่ได้ง่ายหรือไม่ |
|
||
| Testability | ทดสอบได้ง่ายหรือไม่ |
|
||
| Security | มีช่องโหว่หรือไม่ |
|
||
| Performance | มี Bottleneck หรือไม่ |
|
||
|
||
---
|
||
|
||
# Readiness Assessment
|
||
|
||
ทุกหัวข้อ
|
||
|
||
ต้องให้คะแนน
|
||
|
||
```text
|
||
READY
|
||
|
||
PARTIAL
|
||
|
||
NOT READY
|
||
```
|
||
|
||
พร้อมเหตุผล
|
||
|
||
ตัวอย่าง
|
||
|
||
```text
|
||
Permission Catalog
|
||
|
||
Status
|
||
|
||
READY
|
||
|
||
Reason
|
||
|
||
Permission ถูก Centralized แล้ว
|
||
```
|
||
|
||
หรือ
|
||
|
||
```text
|
||
Navigation
|
||
|
||
Status
|
||
|
||
PARTIAL
|
||
|
||
Reason
|
||
|
||
รองรับ Permission Metadata แล้ว
|
||
|
||
แต่ยังใช้ businessRole เป็น fallback
|
||
```
|
||
|
||
---
|
||
|
||
# Audit Categories
|
||
|
||
การตรวจสอบต้องแบ่งออกเป็น
|
||
|
||
## Foundation
|
||
|
||
- Permission Catalog
|
||
- Session
|
||
- Schema
|
||
- Effective Permission
|
||
- Organization
|
||
|
||
---
|
||
|
||
## Compatibility
|
||
|
||
- businessRole
|
||
- membership.role
|
||
- systemRole
|
||
- Legacy Helpers
|
||
|
||
---
|
||
|
||
## Feature
|
||
|
||
แต่ละ Feature
|
||
|
||
ต้องประเมินแยก
|
||
|
||
- Ready
|
||
- Partial
|
||
- Not Ready
|
||
|
||
---
|
||
|
||
## Security
|
||
|
||
ตรวจสอบ
|
||
|
||
- Privilege Escalation
|
||
- Missing Permission Checks
|
||
- Direct URL Access
|
||
- Organization Isolation
|
||
- Data Leakage
|
||
|
||
---
|
||
|
||
## Performance
|
||
|
||
ตรวจสอบ
|
||
|
||
- Permission Resolution
|
||
- Duplicate Queries
|
||
- Session Payload
|
||
- N+1 Queries
|
||
- Cache Opportunities
|
||
|
||
---
|
||
|
||
## Maintainability
|
||
|
||
ตรวจสอบ
|
||
|
||
- Code Duplication
|
||
- Service Separation
|
||
- Helper Reuse
|
||
- Naming Consistency
|
||
- Folder Structure
|
||
|
||
---
|
||
|
||
# Discovery Strategy
|
||
|
||
ห้ามเริ่มจากการค้นหาเฉพาะไฟล์ที่คิดว่าสำคัญ
|
||
|
||
ให้สำรวจระบบทั้งหมดก่อน
|
||
|
||
ตัวอย่าง
|
||
|
||
```text
|
||
Auth
|
||
|
||
↓
|
||
|
||
Session
|
||
|
||
↓
|
||
|
||
Permissions
|
||
|
||
↓
|
||
|
||
Navigation
|
||
|
||
↓
|
||
|
||
Page Guard
|
||
|
||
↓
|
||
|
||
API
|
||
|
||
↓
|
||
|
||
Services
|
||
|
||
↓
|
||
|
||
UI
|
||
```
|
||
|
||
ทุกขั้นตอน
|
||
|
||
ต้องบันทึก
|
||
|
||
- สิ่งที่พบ
|
||
- สิ่งที่ขาด
|
||
- สิ่งที่ซ้ำ
|
||
- สิ่งที่ควรปรับ
|
||
|
||
---
|
||
|
||
# Required Evidence
|
||
|
||
ทุกข้อสรุป
|
||
|
||
ต้องมีหลักฐาน
|
||
|
||
เช่น
|
||
|
||
- File
|
||
- Function
|
||
- Helper
|
||
- Component
|
||
- Route
|
||
- Service
|
||
|
||
ห้ามเขียนว่า
|
||
|
||
> "น่าจะ"
|
||
|
||
> "คาดว่า"
|
||
|
||
> "อาจจะ"
|
||
|
||
หากไม่มีหลักฐาน
|
||
|
||
ให้ระบุว่า
|
||
|
||
```text
|
||
Not Verified
|
||
```
|
||
|
||
---
|
||
|
||
# Audit Deliverables (Section B)
|
||
|
||
เมื่อจบการตรวจสอบใน Section นี้
|
||
|
||
Codex ต้องสามารถสร้างรายการต่อไปนี้ได้
|
||
|
||
- Architecture Validation Matrix
|
||
- Readiness Matrix
|
||
- Foundation Checklist
|
||
- Compatibility Checklist
|
||
- Repository Inspection Summary
|
||
- Code Discovery Summary
|
||
|
||
เอกสารเหล่านี้จะถูกนำไปใช้ต่อใน
|
||
|
||
- Phase 0 Part 2
|
||
- Phase 0 Part 3
|
||
- Phase 0 Part 4
|
||
|
||
และเป็นพื้นฐานสำหรับ Phase 1
|
||
|
||
---
|
||
|
||
# End Of Section B
|
||
|
||
ห้ามเริ่ม Refactor
|
||
|
||
จนกว่าจะผ่านการตรวจสอบทั้งหมดใน Phase 0
|
||
|
||
# Phase 0 – Architecture Audit
|
||
|
||
## Part 1 – Section C
|
||
|
||
### Enterprise Architecture Principles, Validation Rules & Anti-Pattern Detection
|
||
|
||
> **Objective**
|
||
>
|
||
> กำหนดหลักการ (Architecture Principles) และกฎการตรวจสอบ (Validation Rules) สำหรับการย้ายระบบไปสู่ Permission-first Architecture โดยไม่สร้าง Technical Debt เพิ่ม
|
||
|
||
---
|
||
|
||
# Enterprise Architecture Principles
|
||
|
||
ทุกการวิเคราะห์และข้อเสนอแนะในโปรเจกต์นี้ ต้องยึดหลักการต่อไปนี้
|
||
|
||
---
|
||
|
||
## Principle 1 — Permission First
|
||
|
||
Permission คือ Source of Truth เพียงหนึ่งเดียวของระบบ
|
||
|
||
ทุกการตรวจสอบสิทธิ์ ไม่ว่าจะอยู่ที่
|
||
|
||
- API
|
||
- Route Handler
|
||
- Server Action
|
||
- Feature Service
|
||
- Page Guard
|
||
- Navigation
|
||
- UI Visibility
|
||
|
||
ต้องอ้างอิงจาก Effective Permissions เท่านั้น
|
||
|
||
ห้ามตรวจสอบสิทธิ์จาก
|
||
|
||
- businessRole
|
||
- membership.role
|
||
- systemRole
|
||
|
||
โดยตรง
|
||
|
||
Role มีไว้เพื่อช่วย Migration เท่านั้น
|
||
|
||
---
|
||
|
||
## Principle 2 — Effective Permission Is The Truth
|
||
|
||
Permission จริงของผู้ใช้งาน
|
||
|
||
ต้องคำนวณจาก
|
||
|
||
```text
|
||
Permission Template
|
||
|
||
+
|
||
|
||
Allow Override
|
||
|
||
-
|
||
|
||
Deny Override
|
||
|
||
=
|
||
|
||
Effective Permissions
|
||
```
|
||
|
||
ห้ามให้แต่ละ Feature
|
||
|
||
คำนวณ Permission เอง
|
||
|
||
ต้องใช้ Logic กลางเพียงชุดเดียว
|
||
|
||
---
|
||
|
||
## Principle 3 — Server Owns Authorization
|
||
|
||
Server
|
||
|
||
คือเจ้าของการตัดสินใจเรื่องสิทธิ์
|
||
|
||
UI
|
||
|
||
มีหน้าที่เพียง
|
||
|
||
- ซ่อน
|
||
- แสดง
|
||
|
||
เท่านั้น
|
||
|
||
ห้ามเชื่อถือ UI
|
||
|
||
ทุก API
|
||
|
||
ต้องตรวจ Permission ซ้ำเสมอ
|
||
|
||
---
|
||
|
||
## Principle 4 — Single Permission Engine
|
||
|
||
ระบบต้องมี
|
||
|
||
Permission Engine
|
||
|
||
เพียงหนึ่งเดียว
|
||
|
||
ทุกส่วนของระบบ
|
||
|
||
ต้องเรียกใช้ Engine นี้
|
||
|
||
ห้ามมี
|
||
|
||
Permission Logic
|
||
|
||
ซ้ำหลายที่
|
||
|
||
---
|
||
|
||
## Principle 5 — Organization Isolation
|
||
|
||
ทุก Permission
|
||
|
||
ต้องอยู่ภายใต้
|
||
|
||
Organization Context
|
||
|
||
เสมอ
|
||
|
||
ห้ามเกิดกรณี
|
||
|
||
```text
|
||
User A
|
||
|
||
Organization A
|
||
|
||
↓
|
||
|
||
เข้าถึงข้อมูล
|
||
|
||
Organization B
|
||
```
|
||
|
||
โดยไม่ได้รับอนุญาต
|
||
|
||
---
|
||
|
||
## Principle 6 — Incremental Migration
|
||
|
||
ทุก Feature
|
||
|
||
ต้องสามารถย้ายทีละ Module ได้
|
||
|
||
โดยไม่ทำให้
|
||
|
||
Module อื่นเสีย
|
||
|
||
---
|
||
|
||
## Principle 7 — Backward Compatibility
|
||
|
||
Compatibility Layer
|
||
|
||
สามารถมีได้
|
||
|
||
แต่
|
||
|
||
ห้ามเป็น
|
||
|
||
Source of Truth
|
||
|
||
---
|
||
|
||
# Permission-first Validation Rules
|
||
|
||
Codex ต้องตรวจสอบว่า
|
||
|
||
ทุก Layer
|
||
|
||
ใช้
|
||
|
||
Effective Permission
|
||
|
||
จริงหรือไม่
|
||
|
||
Checklist
|
||
|
||
```text
|
||
Permission
|
||
|
||
↓
|
||
|
||
Session
|
||
|
||
↓
|
||
|
||
Permission Engine
|
||
|
||
↓
|
||
|
||
API
|
||
|
||
↓
|
||
|
||
Feature
|
||
|
||
↓
|
||
|
||
Navigation
|
||
|
||
↓
|
||
|
||
UI
|
||
```
|
||
|
||
หากพบ
|
||
|
||
Role
|
||
|
||
เข้ามาเป็นตัวตัดสิน
|
||
|
||
ให้บันทึกเป็น
|
||
|
||
Architecture Finding
|
||
|
||
---
|
||
|
||
# Architecture Validation Rules
|
||
|
||
ตรวจสอบทุก Layer
|
||
|
||
ด้วยกฎเดียวกัน
|
||
|
||
---
|
||
|
||
## Rule 1
|
||
|
||
Business Logic
|
||
|
||
ต้องอยู่
|
||
|
||
Server
|
||
|
||
ไม่ใช่ UI
|
||
|
||
---
|
||
|
||
## Rule 2
|
||
|
||
Authorization
|
||
|
||
ต้องอยู่
|
||
|
||
Server
|
||
|
||
ไม่ใช่ Hook
|
||
|
||
---
|
||
|
||
## Rule 3
|
||
|
||
Permission
|
||
|
||
ต้อง Resolve
|
||
|
||
เพียงครั้งเดียว
|
||
|
||
ไม่ใช่ทุก Feature
|
||
|
||
---
|
||
|
||
## Rule 4
|
||
|
||
ทุก Module
|
||
|
||
ต้องใช้
|
||
|
||
Permission Helper
|
||
|
||
ชุดเดียวกัน
|
||
|
||
---
|
||
|
||
## Rule 5
|
||
|
||
ทุก Query
|
||
|
||
ต้องมี
|
||
|
||
Organization Scope
|
||
|
||
---
|
||
|
||
## Rule 6
|
||
|
||
ทุก Feature
|
||
|
||
ต้องรองรับ
|
||
|
||
Permission Override
|
||
|
||
โดยไม่ต้องเขียน Logic เพิ่ม
|
||
|
||
---
|
||
|
||
# Anti-Pattern Detection
|
||
|
||
Codex
|
||
|
||
ต้องค้นหา
|
||
|
||
Architecture Smell
|
||
|
||
ต่อไปนี้
|
||
|
||
---
|
||
|
||
## Role Leak
|
||
|
||
เช่น
|
||
|
||
```ts
|
||
if (businessRole === "HRD")
|
||
```
|
||
|
||
หรือ
|
||
|
||
```ts
|
||
if (isHRD())
|
||
```
|
||
|
||
---
|
||
|
||
## Permission Leak
|
||
|
||
เช่น
|
||
|
||
Permission
|
||
|
||
ถูกตรวจ
|
||
|
||
เฉพาะ UI
|
||
|
||
---
|
||
|
||
## Organization Leak
|
||
|
||
เช่น
|
||
|
||
Query
|
||
|
||
ไม่มี
|
||
|
||
organization_id
|
||
|
||
---
|
||
|
||
## Duplicate Authorization
|
||
|
||
เช่น
|
||
|
||
Feature A
|
||
|
||
เขียน
|
||
|
||
Permission Logic
|
||
|
||
เอง
|
||
|
||
Feature B
|
||
|
||
เขียนใหม่อีกชุด
|
||
|
||
---
|
||
|
||
## Duplicate Permission Mapping
|
||
|
||
เช่น
|
||
|
||
Announcement
|
||
|
||
มี Mapping
|
||
|
||
คนละชุด
|
||
|
||
กับ
|
||
|
||
Online Lesson
|
||
|
||
---
|
||
|
||
## Feature-specific Permission Resolver
|
||
|
||
เช่น
|
||
|
||
Announcement
|
||
|
||
Resolve Permission
|
||
|
||
เอง
|
||
|
||
แทนที่จะใช้
|
||
|
||
Permission Engine
|
||
|
||
---
|
||
|
||
## Session Leak
|
||
|
||
เช่น
|
||
|
||
Session
|
||
|
||
มีข้อมูล
|
||
|
||
Permission
|
||
|
||
ไม่ตรงกับ
|
||
|
||
Database
|
||
|
||
---
|
||
|
||
## Direct Role Dependency
|
||
|
||
เช่น
|
||
|
||
Navigation
|
||
|
||
ตรวจ
|
||
|
||
businessRole
|
||
|
||
โดยตรง
|
||
|
||
---
|
||
|
||
## UI Trust
|
||
|
||
เช่น
|
||
|
||
ซ่อนปุ่ม
|
||
|
||
แต่
|
||
|
||
API
|
||
|
||
ไม่ตรวจ Permission
|
||
|
||
---
|
||
|
||
## Cross Organization Access
|
||
|
||
เช่น
|
||
|
||
ไม่มี
|
||
|
||
Organization Context
|
||
|
||
ใน Query
|
||
|
||
---
|
||
|
||
# Permission Dependency Validation
|
||
|
||
Codex
|
||
|
||
ต้องตรวจสอบว่า
|
||
|
||
Permission
|
||
|
||
สัมพันธ์กันถูกต้องหรือไม่
|
||
|
||
ตัวอย่าง
|
||
|
||
```text
|
||
announcement:publish
|
||
```
|
||
|
||
ควรมี
|
||
|
||
```text
|
||
announcement:read_all
|
||
```
|
||
|
||
ก่อน
|
||
|
||
หรือ
|
||
|
||
```text
|
||
training_record:approve
|
||
```
|
||
|
||
ควรมี
|
||
|
||
```text
|
||
training_record:review
|
||
```
|
||
|
||
หากพบ
|
||
|
||
Permission
|
||
|
||
ที่ขาด Dependency
|
||
|
||
ให้บันทึก
|
||
|
||
เป็น
|
||
|
||
Finding
|
||
|
||
---
|
||
|
||
# Reuse Validation
|
||
|
||
ก่อนเสนอ
|
||
|
||
สร้าง
|
||
|
||
Service
|
||
|
||
Component
|
||
|
||
Hook
|
||
|
||
Repository
|
||
|
||
Helper
|
||
|
||
ใหม่
|
||
|
||
Codex
|
||
|
||
ต้องตรวจสอบว่า
|
||
|
||
ของเดิม
|
||
|
||
สามารถ Reuse
|
||
|
||
ได้หรือไม่
|
||
|
||
หากสร้างใหม่
|
||
|
||
ต้องอธิบายเหตุผล
|
||
|
||
ทุกครั้ง
|
||
|
||
---
|
||
|
||
# Naming Validation
|
||
|
||
ตรวจสอบ
|
||
|
||
Naming Convention
|
||
|
||
ทั้งหมด
|
||
|
||
เช่น
|
||
|
||
Permission
|
||
|
||
ต้องเป็น
|
||
|
||
```text
|
||
module:action
|
||
```
|
||
|
||
ตัวอย่าง
|
||
|
||
```text
|
||
announcement:create
|
||
|
||
announcement:publish
|
||
|
||
online_lesson:approve
|
||
```
|
||
|
||
ห้ามมี
|
||
|
||
Pattern
|
||
|
||
หลายแบบ
|
||
|
||
ในระบบเดียวกัน
|
||
|
||
---
|
||
|
||
# Layer Responsibility Validation
|
||
|
||
แต่ละ Layer
|
||
|
||
ต้องมีหน้าที่ชัดเจน
|
||
|
||
| Layer | Responsibility |
|
||
| -------------------- | ---------------------------- |
|
||
| Database | Data Storage |
|
||
| Permission Engine | Resolve Effective Permission |
|
||
| Authorization Helper | Permission Validation |
|
||
| API | Business Authorization |
|
||
| Service | Business Logic |
|
||
| Navigation | Menu Visibility |
|
||
| UI | Presentation |
|
||
|
||
ห้าม
|
||
|
||
Business Logic
|
||
|
||
หลุดไปอยู่
|
||
|
||
UI
|
||
|
||
---
|
||
|
||
# Architecture Smell Severity
|
||
|
||
ทุก Finding
|
||
|
||
ต้องถูกจัดระดับ
|
||
|
||
```text
|
||
Critical
|
||
|
||
High
|
||
|
||
Medium
|
||
|
||
Low
|
||
|
||
Information
|
||
```
|
||
|
||
พร้อมเหตุผล
|
||
|
||
และ
|
||
|
||
ผลกระทบ
|
||
|
||
---
|
||
|
||
# Required Outputs
|
||
|
||
หลังจบ Section นี้
|
||
|
||
Codex
|
||
|
||
ต้องสามารถสร้าง
|
||
|
||
- Architecture Principles Validation
|
||
- Anti-Pattern Report
|
||
- Architecture Smell Report
|
||
- Layer Responsibility Report
|
||
- Permission Dependency Report
|
||
- Reuse Opportunity Report
|
||
|
||
ทั้งหมดจะถูกใช้ต่อ
|
||
|
||
ใน
|
||
|
||
Phase 0
|
||
|
||
Part 2
|
||
|
||
---
|
||
|
||
# End Of Section C
|
||
|
||
ห้ามเสนอการ Refactor
|
||
|
||
จนกว่าจะตรวจครบทุก Rule ใน Section นี้
|
||
|
||
# Phase 0 – Architecture Audit
|
||
|
||
## Part 1 – Section D
|
||
|
||
### Deliverables, Reporting Standards, Readiness Assessment & Exit Criteria
|
||
|
||
> **Objective**
|
||
>
|
||
> กำหนดผลลัพธ์ (Deliverables) ที่ Codex ต้องจัดทำหลังจากตรวจสอบระบบเสร็จ รวมถึงมาตรฐานการจัดทำรายงาน การประเมินความพร้อม (Readiness Assessment) และเกณฑ์การอนุมัติให้เข้าสู่ Phase 1
|
||
|
||
---
|
||
|
||
# Deliverables
|
||
|
||
เมื่อจบ Phase 0
|
||
|
||
Codex ต้องสร้างเอกสารในโฟลเดอร์
|
||
|
||
```text
|
||
docs/architecture-audit/
|
||
```
|
||
|
||
ประกอบด้วยเอกสารอย่างน้อยดังต่อไปนี้
|
||
|
||
```text
|
||
phase-0-architecture-audit.md
|
||
|
||
phase-0-readiness-report.md
|
||
|
||
phase-0-risk-register.md
|
||
|
||
phase-0-migration-checklist.md
|
||
|
||
phase-0-architecture-findings.md
|
||
|
||
phase-0-technical-debt.md
|
||
|
||
phase-0-next-phase-plan.md
|
||
```
|
||
|
||
ห้ามรวมทุกอย่างไว้ในไฟล์เดียว
|
||
|
||
แต่ละเอกสารต้องมีวัตถุประสงค์ชัดเจน
|
||
|
||
---
|
||
|
||
# Architecture Audit Report
|
||
|
||
รายงานหลักของ Phase 0
|
||
|
||
ต้องประกอบด้วย
|
||
|
||
## Executive Summary
|
||
|
||
สรุปภาพรวม
|
||
|
||
- สถานะปัจจุบัน
|
||
- จุดแข็ง
|
||
- จุดอ่อน
|
||
- ความพร้อม
|
||
- ความเสี่ยง
|
||
- คำแนะนำ
|
||
|
||
---
|
||
|
||
## Current Architecture
|
||
|
||
อธิบาย Architecture ปัจจุบัน
|
||
|
||
พร้อม Diagram
|
||
|
||
เช่น
|
||
|
||
```text
|
||
Authentication
|
||
|
||
↓
|
||
|
||
Session
|
||
|
||
↓
|
||
|
||
Permission Resolution
|
||
|
||
↓
|
||
|
||
API
|
||
|
||
↓
|
||
|
||
Feature
|
||
|
||
↓
|
||
|
||
Navigation
|
||
|
||
↓
|
||
|
||
UI
|
||
```
|
||
|
||
---
|
||
|
||
## Findings
|
||
|
||
สรุปสิ่งที่พบ
|
||
|
||
แบ่งตาม
|
||
|
||
- Critical
|
||
- High
|
||
- Medium
|
||
- Low
|
||
|
||
พร้อม
|
||
|
||
- File
|
||
- Module
|
||
- Description
|
||
- Impact
|
||
- Recommendation
|
||
|
||
---
|
||
|
||
## Reuse Opportunities
|
||
|
||
สรุป
|
||
|
||
Service
|
||
|
||
Helper
|
||
|
||
Component
|
||
|
||
ที่สามารถ Reuse
|
||
|
||
ได้
|
||
|
||
---
|
||
|
||
## Technical Debt
|
||
|
||
สรุป
|
||
|
||
Legacy Code
|
||
|
||
Code Duplication
|
||
|
||
Architecture Smell
|
||
|
||
Dependency
|
||
|
||
ที่ยังเหลือ
|
||
|
||
---
|
||
|
||
# Readiness Report
|
||
|
||
รายงานนี้
|
||
|
||
มีหน้าที่ตอบเพียงคำถามเดียว
|
||
|
||
```text
|
||
ระบบพร้อมเข้าสู่ Phase 1 หรือไม่
|
||
```
|
||
|
||
ต้องแบ่งเป็นหมวด
|
||
|
||
ตัวอย่าง
|
||
|
||
| Category | Status | Score | Notes |
|
||
| ------------------ | --------- | ----: | ------------------- |
|
||
| Permission Catalog | READY | 100 | ครบถ้วน |
|
||
| Session | READY | 95 | เหลือ Compatibility |
|
||
| Navigation | PARTIAL | 60 | ยังใช้ businessRole |
|
||
| Route Handler | NOT READY | 20 | ยังใช้ requireHRD |
|
||
| Admin UI | NOT READY | 0 | ยังไม่มี |
|
||
|
||
---
|
||
|
||
# Readiness Levels
|
||
|
||
ใช้ระดับดังนี้
|
||
|
||
```text
|
||
READY
|
||
|
||
PARTIAL
|
||
|
||
NOT READY
|
||
```
|
||
|
||
พร้อมคะแนน
|
||
|
||
```text
|
||
0 - 100
|
||
```
|
||
|
||
เกณฑ์
|
||
|
||
```text
|
||
90-100
|
||
|
||
Production Ready
|
||
|
||
70-89
|
||
|
||
Ready For Migration
|
||
|
||
40-69
|
||
|
||
Need Improvement
|
||
|
||
0-39
|
||
|
||
Not Ready
|
||
```
|
||
|
||
---
|
||
|
||
# Risk Register
|
||
|
||
ทุก Risk
|
||
|
||
ต้องมี
|
||
|
||
| Field | Description |
|
||
| -------------- | ------------------------------ |
|
||
| Risk ID | รหัส |
|
||
| Severity | Critical / High / Medium / Low |
|
||
| Probability | High / Medium / Low |
|
||
| Impact | Business Impact |
|
||
| Recommendation | วิธีลดความเสี่ยง |
|
||
| Owner | ผู้รับผิดชอบ |
|
||
| Phase | ควรแก้ในเฟสใด |
|
||
|
||
ตัวอย่าง
|
||
|
||
```text
|
||
R-001
|
||
|
||
Legacy businessRole
|
||
|
||
High
|
||
|
||
ควรลบใน Phase 4
|
||
```
|
||
|
||
---
|
||
|
||
# Migration Checklist
|
||
|
||
สร้าง Checklist
|
||
|
||
ที่สามารถใช้จริง
|
||
|
||
ในทุก Phase
|
||
|
||
ตัวอย่าง
|
||
|
||
```text
|
||
Permission Engine
|
||
|
||
☑
|
||
|
||
Template Service
|
||
|
||
☑
|
||
|
||
Navigation
|
||
|
||
☐
|
||
|
||
Announcement
|
||
|
||
☐
|
||
|
||
Online Lesson
|
||
|
||
☐
|
||
|
||
Training Record
|
||
|
||
☐
|
||
|
||
Admin UI
|
||
|
||
☐
|
||
|
||
Cleanup
|
||
|
||
☐
|
||
```
|
||
|
||
---
|
||
|
||
# Architecture Scorecard
|
||
|
||
ประเมินแต่ละหัวข้อ
|
||
|
||
| Category | Score |
|
||
| ------------------ | ----: |
|
||
| Architecture | |
|
||
| Security | |
|
||
| Authorization | |
|
||
| Session | |
|
||
| Performance | |
|
||
| Maintainability | |
|
||
| Scalability | |
|
||
| Multi Organization | |
|
||
| Compatibility | |
|
||
| Testability | |
|
||
|
||
พร้อม
|
||
|
||
คะแนนรวม
|
||
|
||
---
|
||
|
||
# Documentation Standards
|
||
|
||
ทุกเอกสาร
|
||
|
||
ต้องมี
|
||
|
||
## Summary
|
||
|
||
## Findings
|
||
|
||
## Evidence
|
||
|
||
## Recommendation
|
||
|
||
## Impact
|
||
|
||
## Next Step
|
||
|
||
ห้ามมีเพียง
|
||
|
||
ความคิดเห็น
|
||
|
||
โดยไม่มีหลักฐาน
|
||
|
||
---
|
||
|
||
# Evidence Requirements
|
||
|
||
ทุก Finding
|
||
|
||
ต้องอ้างอิง
|
||
|
||
- File
|
||
- Function
|
||
- Component
|
||
- Route
|
||
- Helper
|
||
- Service
|
||
|
||
ตัวอย่าง
|
||
|
||
```text
|
||
File
|
||
|
||
src/lib/auth/session.ts
|
||
|
||
Function
|
||
|
||
requirePermission()
|
||
|
||
Finding
|
||
|
||
ยังมี fallback ไป businessRole
|
||
```
|
||
|
||
ห้ามเขียน
|
||
|
||
```text
|
||
น่าจะ
|
||
|
||
อาจจะ
|
||
|
||
คาดว่า
|
||
```
|
||
|
||
---
|
||
|
||
# Recommendation Standards
|
||
|
||
ทุก Recommendation
|
||
|
||
ต้องจัดลำดับ
|
||
|
||
```text
|
||
Immediate
|
||
|
||
Short Term
|
||
|
||
Medium Term
|
||
|
||
Long Term
|
||
```
|
||
|
||
พร้อมเหตุผล
|
||
|
||
---
|
||
|
||
# Phase Gate
|
||
|
||
ก่อนเข้าสู่
|
||
|
||
Phase 1
|
||
|
||
ต้องตรวจสอบว่า
|
||
|
||
## Permission Catalog
|
||
|
||
READY
|
||
|
||
---
|
||
|
||
## Effective Permission Resolver
|
||
|
||
READY
|
||
|
||
---
|
||
|
||
## Session
|
||
|
||
READY
|
||
|
||
---
|
||
|
||
## Schema
|
||
|
||
READY
|
||
|
||
---
|
||
|
||
## Compatibility Layer
|
||
|
||
PARTIAL หรือ READY
|
||
|
||
---
|
||
|
||
## Critical Issues
|
||
|
||
ต้องไม่มี
|
||
|
||
---
|
||
|
||
## High Severity
|
||
|
||
ต้องมีแผนแก้
|
||
|
||
---
|
||
|
||
## Documentation
|
||
|
||
ครบทุกไฟล์
|
||
|
||
---
|
||
|
||
# Exit Criteria
|
||
|
||
Phase 0
|
||
|
||
ถือว่าเสร็จ
|
||
|
||
เมื่อ
|
||
|
||
- Audit ครบทุก Layer
|
||
- ตรวจ Repository ครบทุก Module
|
||
- Architecture Validation ผ่าน
|
||
- Security Review ผ่าน
|
||
- Compatibility Review ผ่าน
|
||
- Readiness Report เสร็จ
|
||
- Risk Register เสร็จ
|
||
- Migration Checklist เสร็จ
|
||
- Technical Debt Report เสร็จ
|
||
- Next Phase Plan เสร็จ
|
||
|
||
หากเงื่อนไขใดไม่ผ่าน
|
||
|
||
ห้ามเริ่ม
|
||
|
||
Phase 1
|
||
|
||
---
|
||
|
||
# Definition Of Done
|
||
|
||
Phase 0
|
||
|
||
จะถือว่าเสร็จสมบูรณ์
|
||
|
||
เมื่อสามารถตอบคำถามต่อไปนี้ได้ทั้งหมด
|
||
|
||
- Foundation พร้อมหรือไม่
|
||
- Permission-first Model ถูกต้องหรือไม่
|
||
- Effective Permission เป็น Source Of Truth จริงหรือไม่
|
||
- Organization Isolation เพียงพอหรือไม่
|
||
- Feature ใดพร้อม Migration ก่อน
|
||
- Feature ใดมีความเสี่ยง
|
||
- Legacy ส่วนใดยังจำเป็น
|
||
- Legacy ส่วนใดสามารถลบได้ในอนาคต
|
||
- Architecture มี Technical Debt อะไร
|
||
- ระบบพร้อมเข้าสู่ Phase 1 หรือยัง
|
||
|
||
---
|
||
|
||
# Next Phase Handover
|
||
|
||
เมื่อจบ Phase 0
|
||
|
||
ให้สร้างเอกสาร
|
||
|
||
```text
|
||
docs/architecture-audit/phase-0-next-phase-plan.md
|
||
```
|
||
|
||
โดยระบุ
|
||
|
||
## Recommended Phase Order
|
||
|
||
```text
|
||
Phase 1
|
||
|
||
Permission Core Architecture
|
||
|
||
↓
|
||
|
||
Phase 2
|
||
|
||
Feature Authorization Migration
|
||
|
||
↓
|
||
|
||
Phase 3
|
||
|
||
Permission Administration
|
||
|
||
↓
|
||
|
||
Phase 4
|
||
|
||
Compatibility Cleanup
|
||
```
|
||
|
||
พร้อม
|
||
|
||
- Dependencies
|
||
- Risks
|
||
- Estimated Complexity
|
||
- Expected Deliverables
|
||
|
||
เพื่อใช้เป็นเอกสารอ้างอิงของทุกเฟสถัดไป
|
||
|
||
---
|
||
|
||
# End Of Part 1
|
||
|
||
เมื่อ Part 1 เสร็จ
|
||
|
||
ห้ามเริ่ม Refactor
|
||
|
||
ห้ามเริ่ม Feature Migration
|
||
|
||
ห้ามแก้ไขโค้ด
|
||
|
||
จนกว่าจะเข้าสู่
|
||
|
||
**Phase 0 – Part 2 (Codebase Architecture Audit)**
|
||
|
||
ซึ่งจะเป็นการตรวจสอบ Repository จริงแบบ File-by-File และ Module-by-Module โดยอ้างอิงหลักการทั้งหมดจาก Part 1
|