# Prompt: ตรวจสอบการแสดงผลของระบบเทียบกับ Permission โดยยังไม่แก้ไขโค้ด

## เป้าหมาย

ให้ตรวจสอบระบบทั้งหมดว่า การแสดงผลของหน้า เมนู ปุ่ม ข้อมูล ฟิลด์ และ Action ต่าง ๆ สอดคล้องกับ Permission และ Role ที่ระบบกำหนดไว้จริงหรือไม่

งานนี้เป็น **Audit / Review เท่านั้น**
ห้ามแก้ไขโค้ด ห้ามเปลี่ยน Permission และห้ามปรับพฤติกรรมของระบบในขั้นตอนนี้

ผลลัพธ์ที่ต้องการคือรายงานปัญหา พร้อมหลักฐาน ตำแหน่งโค้ด ผลกระทบ และแนวทางแก้ไขสำหรับนำไปดำเนินการในขั้นตอนถัดไป

---

## ขอบเขตการตรวจสอบ

ตรวจสอบทั้งระบบ ครอบคลุมอย่างน้อยดังนี้

- Sidebar และ Navigation
- Dashboard
- หน้ารายการ
- หน้ารายละเอียด
- หน้าสร้างข้อมูล
- หน้าแก้ไขข้อมูล
- Dialog, Modal, Drawer, Sheet และ Dropdown Menu
- ปุ่ม Action ในตาราง
- ปุ่มสร้าง แก้ไข ลบ ส่งตรวจสอบ อนุมัติ ปฏิเสธ ส่งกลับ และเผยแพร่
- ข้อมูลภายใน Card, Table, Form และ Detail Section
- หมายเหตุการตรวจสอบ
- ประวัติการอนุมัติ
- Audit Log
- API Route
- Server Action
- Query และ Service Layer
- Middleware
- Route Guard
- Permission Helper
- Role Guard
- Component Guard
- Backend Authorization

ให้ตรวจสอบทุกโมดูลที่มีอยู่ในระบบ เช่น

- ผู้ใช้งานและพนักงาน
- ประวัติการอบรม
- บทเรียนออนไลน์
- ประกาศ
- การแจ้งเตือน
- นโยบาย
- การอนุมัติ
- รายงาน
- ตั้งค่าระบบ
- Audit Log
- โมดูลอื่น ๆ ที่ค้นพบในโครงการ

---

## Role และ Permission

ให้ค้นหา Role และ Permission จากโค้ดจริงก่อนเริ่มตรวจสอบ เช่น

- User / Employee
- Admin
- HRD Staff
- HRD Manager
- IT Admin
- Reviewer
- Approver
- Role อื่น ๆ ที่ระบบมีอยู่จริง

ห้ามสมมติชื่อ Role หรือ Permission จากเอกสารเพียงอย่างเดียว

ให้ค้นหาแหล่งกำหนด Permission ทั้งหมด เช่น

- Enum
- Constant
- Permission Matrix
- Database Schema
- Seed Data
- Middleware
- Session
- JWT
- Auth.js callback
- Route configuration
- Sidebar configuration
- Helper function เช่น `hasPermission`, `canAccess`, `canManage`
- Server-side authorization
- Client-side conditional rendering

จากนั้นจัดทำ Permission Matrix ที่อ้างอิงจากโค้ดจริงก่อนตรวจสอบหน้าจอ

---

## หลักการตรวจสอบ

การตรวจสอบต้องครอบคลุมทั้งสองระดับ

### 1. การแสดงผลฝั่ง Client

ตรวจสอบว่า Role หรือ Permission แต่ละประเภทเห็นเฉพาะสิ่งที่ควรเห็นหรือไม่ เช่น

- เมนูที่ไม่มีสิทธิ์ถูกซ่อนหรือไม่
- ปุ่มที่ไม่มีสิทธิ์ถูกซ่อนหรือ Disable อย่างถูกต้องหรือไม่
- ข้อมูลภายในหน้ารายละเอียดถูกกรองตามสิทธิ์หรือไม่
- ฟิลด์ภายใน Form แสดงตาม Role หรือ Status หรือไม่
- Action Menu แสดงเฉพาะ Action ที่ทำได้จริงหรือไม่
- ข้อความ หมายเหตุ และประวัติภายในระบบเปิดเผยเกินสิทธิ์หรือไม่

### 2. การบังคับสิทธิ์ฝั่ง Server

ห้ามสรุปว่าระบบปลอดภัยเพียงเพราะซ่อนปุ่มหรือซ่อนเมนูแล้ว

ต้องตรวจสอบด้วยว่า ผู้ไม่มีสิทธิ์สามารถเรียกใช้งานผ่าน URL, API, Server Action หรือ Request โดยตรงได้หรือไม่ เช่น

- เปิด URL โดยตรง
- เรียก API โดยตรง
- ส่ง Request จาก DevTools
- แก้ไข Parameter
- เปลี่ยน Record ID
- เรียก Server Action โดยไม่ผ่าน UI
- เข้าถึงข้อมูลของผู้ใช้งานรายอื่น
- แก้ไขข้อมูลของผู้ใช้งานรายอื่น
- เรียก Action ที่ UI ซ่อนไว้

---

## ประเด็นสำคัญที่ต้องตรวจสอบ

### A. เมนูและเส้นทาง

ตรวจสอบว่า

- Sidebar แสดงเมนูตาม Permission
- ผู้ไม่มีสิทธิ์ไม่สามารถเข้าหน้าผ่าน URL โดยตรง
- Route Guard และ Middleware ใช้เงื่อนไขเดียวกับ Sidebar
- ไม่มีหน้าที่ซ่อนเมนูแต่ยังเข้าผ่าน URL ได้
- ไม่มีหน้าที่ Sidebar แสดงให้เห็น แต่เข้าใช้งานจริงไม่ได้
- Redirect และ Forbidden Page ทำงานสม่ำเสมอ

### B. ปุ่มและ Action

ตรวจสอบทุก Action เช่น

- สร้าง
- บันทึกฉบับร่าง
- แก้ไข
- ลบ
- ส่งตรวจสอบ
- อนุมัติ
- ปฏิเสธ
- ส่งกลับแก้ไข
- เผยแพร่
- ยกเลิกเผยแพร่
- ปักหมุด
- นำเข้า
- ส่งออก
- ดาวน์โหลด
- จัดการ Permission

ตรวจสอบว่า

- ปุ่มแสดงเฉพาะ Role ที่มีสิทธิ์
- Action สอดคล้องกับสถานะข้อมูล
- Backend ตรวจ Permission ซ้ำ
- ไม่สามารถข้าม Workflow ได้
- ไม่มี Action ที่ UI แสดงแต่ Backend ปฏิเสธโดยไม่ตั้งใจ
- ไม่มี Action ที่ UI ซ่อน แต่ Backend ยังอนุญาต

### C. การแสดงข้อมูลละเอียดอ่อน

ตรวจสอบข้อมูลที่อาจไม่ควรแสดงแก่ผู้ใช้งานทั่วไป เช่น

- หมายเหตุการตรวจสอบ
- เหตุผลการปฏิเสธ
- Internal Comment
- Reviewer Note
- Approval Note
- Audit Log
- ชื่อผู้อนุมัติ
- ประวัติการแก้ไข
- Metadata ภายใน
- Permission หรือ Role ภายใน
- ข้อมูลพนักงานรายอื่น
- ข้อมูลสถานะภายใน Workflow

ให้ตรวจสอบเป็นพิเศษว่า หน้าผู้ใช้งานทั่วไปมีการแสดง “หมายเหตุการตรวจสอบ” หรือข้อมูลภายในของเจ้าหน้าที่โดยไม่ตั้งใจหรือไม่

### D. Ownership และขอบเขตข้อมูล

ตรวจสอบว่า

- ผู้ใช้งานทั่วไปเห็นเฉพาะข้อมูลของตนเอง
- เจ้าหน้าที่เห็นข้อมูลตามบริษัท ฝ่าย หรือขอบเขตที่กำหนด
- Reviewer และ Approver เห็นเฉพาะรายการที่เกี่ยวข้อง
- Admin เห็นข้อมูลทั้งหมดตามที่ออกแบบ
- การเปลี่ยน ID ใน URL หรือ Request ไม่ทำให้เข้าถึงข้อมูลของผู้อื่น
- Query มีเงื่อนไขกรองตาม Ownership และ Permission
- การ Export ไม่ส่งออกข้อมูลเกินสิทธิ์
- Search และ Filter ไม่สามารถใช้ดึงข้อมูลนอกขอบเขต

### E. Workflow และ Status

ตรวจสอบ Permission ร่วมกับสถานะ เช่น

- Draft
- Pending
- Submitted
- Approved
- Rejected
- Returned
- Published
- Archived
- Cancelled
- สถานะอื่นที่มีอยู่จริง

ตัวอย่างการตรวจสอบ

- เจ้าของรายการแก้ไขได้เฉพาะ Draft หรือ Returned หรือไม่
- เมื่อส่งตรวจสอบแล้ว ผู้ใช้งานยังแก้ไขได้หรือไม่
- ผู้ใช้งานเห็นรายการ Rejected หรือ Returned ตามที่กำหนดหรือไม่
- Reviewer เห็นรายการที่ต้องตรวจสอบจริงหรือไม่
- Approver สามารถอนุมัติรายการที่ยังไม่ถึงขั้นตนเองหรือไม่
- รายการ Published แสดงแก่ผู้ใช้งานตามเงื่อนไขหรือไม่
- การแสดงปุ่มสอดคล้องกับ Permission และ Status พร้อมกันหรือไม่

---

## วิธีดำเนินการ

### ขั้นตอนที่ 1: สำรวจโครงสร้าง Permission

ค้นหาและสรุป

- Role ทั้งหมด
- Permission ทั้งหมด
- Mapping ระหว่าง Role และ Permission
- Permission Helper ทั้งหมด
- Route Guard
- API Guard
- Server Action Guard
- Ownership Rule
- Status Rule

### ขั้นตอนที่ 2: จัดทำ Permission Matrix

จัดทำตารางในรูปแบบประมาณนี้

| Module         | Page / Action        |       User | Staff | Manager |   Admin | เงื่อนไขเพิ่มเติม       |
| -------------- | -------------------- | ---------: | ----: | ------: | ------: | ----------------------- |
| Online Lessons | ดูรายการเผยแพร่      |        Yes |   Yes |     Yes |     Yes | เฉพาะ Published         |
| Online Lessons | ดูหมายเหตุการตรวจสอบ |         No |   Yes |     Yes |     Yes | ผู้ใช้งานทั่วไปห้ามเห็น |
| Online Lessons | แก้ไข Draft          | Owner only |   Yes |     Yes |     Yes | ตาม Ownership           |
| Online Lessons | อนุมัติ              |         No |    No |     Yes | ตามระบบ | Pending เท่านั้น        |

ให้ใช้ Role จริงจากระบบแทนตัวอย่างข้างต้น

### ขั้นตอนที่ 3: ตรวจสอบ UI กับ Matrix

ตรวจสอบทุกหน้าและ Component ว่า

- Render Condition ถูกต้องหรือไม่
- ใช้ Permission Helper มาตรฐานหรือไม่
- มีการ Hardcode Role หรือไม่
- มี Logic ซ้ำซ้อนหรือขัดแย้งกันหรือไม่
- มีการตรวจเฉพาะ Role แต่ไม่ตรวจ Permission หรือไม่
- มีการตรวจเฉพาะ Status แต่ไม่ตรวจ Role หรือไม่
- มีการซ่อนด้วย CSS โดยไม่ได้หยุดการ Render หรือไม่

### ขั้นตอนที่ 4: ตรวจสอบ Backend กับ Matrix

ตรวจสอบ

- API Route
- Route Handler
- Server Action
- Service Function
- Repository
- Database Query

ให้ยืนยันว่าแต่ละ Action ตรวจสอบครบทั้ง

1. Authentication
2. Role หรือ Permission
3. Ownership หรือ Data Scope
4. Record Status
5. Input Validation

### ขั้นตอนที่ 5: ตรวจหาความไม่สอดคล้อง

จัดประเภทปัญหาอย่างน้อยดังนี้

- UI แสดงเกินสิทธิ์
- UI ซ่อนผิด แม้มีสิทธิ์
- เข้าผ่าน URL โดยตรงได้
- API ไม่มี Authorization
- Server Action ไม่มี Authorization
- Data Query ไม่กรอง Ownership
- Export ข้อมูลเกินสิทธิ์
- Role และ Permission Logic ไม่ตรงกัน
- Permission Logic กระจายหลายจุด
- Hardcoded Role
- Status Guard ไม่ครบ
- ข้อมูลภายในรั่วไปยังผู้ใช้งานทั่วไป
- Client และ Server ใช้เงื่อนไขต่างกัน
- Permission Matrix ไม่ตรงกับการทำงานจริง

---

## สิ่งที่ห้ามทำ

- ห้ามแก้ไขไฟล์ใด ๆ
- ห้าม Refactor
- ห้ามเปลี่ยน Permission
- ห้ามเปลี่ยน Role
- ห้ามแก้ Middleware
- ห้ามแก้ Component
- ห้ามแก้ API
- ห้ามแก้ Server Action
- ห้ามแก้ Database Schema
- ห้ามสร้าง Migration
- ห้ามรันคำสั่งที่แก้ไขข้อมูล
- ห้ามลบหรือเพิ่ม Dependency
- ห้าม Commit
- ห้าม Push
- ห้ามสรุปจากชื่อไฟล์โดยไม่ได้อ่าน Logic จริง

อนุญาตเฉพาะการอ่าน วิเคราะห์ ค้นหา และจัดทำรายงาน

---

## รูปแบบรายงานที่ต้องส่งมอบ

สร้างไฟล์

```text
permission-display-audit.md
```

โดยมีโครงสร้างดังนี้

# Permission and Display Audit Report

## 1. Executive Summary

สรุปภาพรวมว่า

- ระบบสอดคล้องกับ Permission มากน้อยเพียงใด
- พบ Critical, High, Medium และ Low กี่รายการ
- โมดูลใดมีความเสี่ยงสูง
- มีข้อมูลใดถูกแสดงเกินสิทธิ์หรือไม่
- Backend บังคับ Permission ครบถ้วนหรือไม่

## 2. Roles and Permissions Discovered

ระบุ

- Role ที่พบ
- Permission ที่พบ
- แหล่งที่กำหนด
- File path
- Logic โดยย่อ

## 3. Permission Matrix

ตารางสิทธิ์ของทุกโมดูล ทุกหน้า และทุก Action

## 4. Route and Navigation Audit

ตาราง

| ID  | Route | Menu Permission | Route Guard | Direct URL Result | Status |
| --- | ----- | --------------- | ----------- | ----------------- | ------ |

## 5. UI Display Audit

ตาราง

| ID  | Module | Page / Component | Element | Expected | Actual | Severity | Evidence |
| --- | ------ | ---------------- | ------- | -------- | ------ | -------- | -------- |

## 6. Backend Authorization Audit

ตาราง

| ID  | Endpoint / Action | Authentication | Permission | Ownership | Status Guard | Result |
| --- | ----------------- | -------------- | ---------- | --------- | ------------ | ------ |

## 7. Findings

สำหรับแต่ละปัญหา ให้ใช้รูปแบบ

### PERM-001: ชื่อปัญหา

- Severity:
- Module:
- Affected roles:
- Expected behavior:
- Actual behavior:
- Security or business impact:
- Root cause:
- Evidence:
- File path:
- Line or code reference:
- Reproduction steps:
- Recommended remediation:
- Related findings:

## 8. Role-based Test Scenarios

จัดทำกรณีทดสอบสำหรับแต่ละ Role เช่น

| Test ID | Role | Page | Action | Expected Result |
| ------- | ---- | ---- | ------ | --------------- |

ต้องครอบคลุมอย่างน้อย

- เปิดเมนู
- เปิด URL โดยตรง
- ดูรายการ
- ดูรายละเอียด
- สร้าง
- แก้ไข
- ลบ
- ส่งตรวจสอบ
- อนุมัติ
- ปฏิเสธ
- ส่งกลับ
- Export
- เข้าถึงข้อมูลของผู้อื่น
- เปลี่ยน Record ID
- เรียก API โดยตรง

## 9. Prioritized Remediation Plan

จัดลำดับแนวทางแก้ไข โดยยังไม่แก้โค้ด

### Priority 0 — Critical Security

ปัญหาที่ทำให้ผู้ไม่มีสิทธิ์เข้าถึงหรือแก้ไขข้อมูลได้

### Priority 1 — Permission Mismatch

UI และ Backend ใช้เงื่อนไขไม่ตรงกัน

### Priority 2 — Data Exposure

ข้อมูลภายในหรือหมายเหตุแสดงเกินสิทธิ์

### Priority 3 — Maintainability

Permission Logic ซ้ำซ้อน กระจาย หรือ Hardcode

## 10. Files Reviewed

ระบุไฟล์ทั้งหมดที่ตรวจสอบ พร้อมเหตุผลที่เกี่ยวข้อง

## 11. Files Not Reviewed or Limitations

ระบุส่วนที่ไม่สามารถตรวจสอบได้ พร้อมเหตุผลอย่างตรงไปตรงมา

## 12. Final Assessment

สรุปว่า

- ระบบพร้อมใช้งานในด้าน Permission หรือไม่
- ประเด็นใดต้องแก้ก่อน Production
- ประเด็นใดสามารถวางแผนแก้ภายหลัง
- ความเสี่ยงที่ยังเหลืออยู่

---

## ระดับความรุนแรง

### Critical

- ผู้ไม่มีสิทธิ์เข้าถึงหรือแก้ไขข้อมูลสำคัญได้
- API หรือ Server Action ไม่มี Authorization
- เปลี่ยน Record ID แล้วเข้าถึงข้อมูลของผู้อื่นได้
- สามารถข้าม Workflow หรืออนุมัติแทน Role อื่นได้

### High

- UI หรือ Route แสดงข้อมูลละเอียดอ่อนเกินสิทธิ์
- Permission ระหว่าง Client และ Server ไม่ตรงกัน
- Ownership Rule ไม่ครบ
- Export ข้อมูลเกินขอบเขต

### Medium

- ปุ่มแสดงหรือซ่อนผิด
- Status และ Permission ไม่สัมพันธ์กัน
- ผู้มีสิทธิ์ใช้งานไม่ได้ตามปกติ
- Logic ซ้ำซ้อนและเสี่ยงเกิดความไม่สอดคล้อง

### Low

- ข้อความไม่เหมาะสมกับ Role
- UI สื่อความหมาย Permission ไม่ชัด
- Code Quality หรือ Maintainability ที่ยังไม่ทำให้สิทธิ์ผิดทันที

---

## เกณฑ์การตรวจสอบเพิ่มเติม

- อ้างอิงจากโค้ดจริง ไม่อ้างอิงเฉพาะ Requirement
- ทุก Finding ต้องมี File path หรือหลักฐาน
- แยก Expected กับ Actual ให้ชัดเจน
- ห้ามรายงานเป็นข้อสันนิษฐานโดยไม่มีหลักฐาน
- เมื่อไม่แน่ใจให้ระบุว่า “ต้องยืนยันเพิ่มเติม”
- ตรวจสอบทั้ง Client และ Server เสมอ
- ให้ความสำคัญกับ Security มากกว่าการซ่อน UI
- ห้ามใช้คำว่า “ผ่าน” หากตรวจเพียงฝั่งหน้าเว็บ
- ตรวจสอบว่าการใช้ `role`, `permission`, `status` และ `ownership` เป็นมาตรฐานเดียวกันทั้งระบบหรือไม่

---

## คำสั่งสุดท้าย

เริ่มจากสำรวจโครงสร้างโปรเจกต์และ Permission ทั้งหมดก่อน จากนั้นตรวจสอบการแสดงผลและการเข้าถึงของระบบทุกโมดูล

งานนี้ให้ดำเนินการเฉพาะการตรวจสอบและจัดทำรายงานเท่านั้น ห้ามแก้ไขโค้ดทุกกรณี

เมื่อเสร็จแล้วให้สรุปในข้อความตอบกลับว่า

1. พบปัญหาทั้งหมดกี่รายการ แยกตาม Severity
2. โมดูลใดมีความเสี่ยงสูงที่สุด
3. มีกรณีข้อมูลแสดงเกินสิทธิ์หรือไม่
4. มี API หรือ Server Action ที่ไม่มี Authorization หรือไม่
5. สร้างไฟล์รายงานไว้ที่ตำแหน่งใด
6. ยืนยันว่าไม่มีการแก้ไขโค้ดหรือข้อมูลในระบบ
