Files
alla-tms/docs/role-permission-management-implementation-report.md
2026-07-16 09:53:14 +07:00

8.4 KiB

Role & Permission Management Implementation Report

วันที่อัปเดต: 2026-07-07

1. Summary

พัฒนา Coding Phase 1 ของระบบ Role & Permission Management ตามแผนใน docs/role-permission-management-plan.md โดยยังคง compatibility mode เดิมของระบบไว้ และยังไม่ย้าย feature อื่นไปใช้ permission-first model

สิ่งที่ทำแล้ว:

  • สร้าง feature module src/features/permission-management/
  • เพิ่มหน้า dashboard:
    • /dashboard/permissions/templates
    • /dashboard/permissions/matrix
    • /dashboard/permissions/users
    • /dashboard/permissions/audit-logs
  • เพิ่ม route handlers สำหรับ permission templates, permission catalog, user permission assignments, overrides, และ permission audit logs
  • เพิ่ม super-admin-only page guard สำหรับหน้า permission management
  • เพิ่มเมนู Permission Management ใน sidebar โดยมองเห็นเฉพาะ super_admin
  • เพิ่ม report และ TODO ที่จำเป็นโดยไม่แก้ schema/migration ตามข้อกำหนดของ phase นี้

2. Files Created

  • src/features/permission-management/api/types.ts
  • src/features/permission-management/api/service.ts
  • src/features/permission-management/api/queries.ts
  • src/features/permission-management/api/mutations.ts
  • src/features/permission-management/schemas/permission-template.ts
  • src/features/permission-management/schemas/user-permission-assignment.ts
  • src/features/permission-management/server/permission-management-catalog.ts
  • src/features/permission-management/server/permission-audit-service.ts
  • src/features/permission-management/server/permission-template-data.ts
  • src/features/permission-management/server/user-permission-data.ts
  • src/features/permission-management/server/permission-audit-data.ts
  • src/features/permission-management/components/permission-status-badge.tsx
  • src/features/permission-management/components/permission-template-form-sheet.tsx
  • src/features/permission-management/components/permission-template-row-actions.tsx
  • src/features/permission-management/components/permission-template-columns.tsx
  • src/features/permission-management/components/permission-template-table.tsx
  • src/features/permission-management/components/permission-template-listing.tsx
  • src/features/permission-management/components/permission-matrix.tsx
  • src/features/permission-management/components/effective-permission-preview.tsx
  • src/features/permission-management/components/user-permission-sheet.tsx
  • src/features/permission-management/components/user-permission-row-actions.tsx
  • src/features/permission-management/components/user-permission-columns.tsx
  • src/features/permission-management/components/user-permission-table.tsx
  • src/features/permission-management/components/user-permission-listing.tsx
  • src/features/permission-management/components/permission-audit-log-columns.tsx
  • src/features/permission-management/components/permission-audit-log-table.tsx
  • src/features/permission-management/components/permission-audit-log-listing.tsx
  • src/app/dashboard/permissions/templates/page.tsx
  • src/app/dashboard/permissions/matrix/page.tsx
  • src/app/dashboard/permissions/users/page.tsx
  • src/app/dashboard/permissions/audit-logs/page.tsx
  • src/app/api/permissions/catalog/route.ts
  • src/app/api/permission-templates/route.ts
  • src/app/api/permission-templates/[id]/route.ts
  • src/app/api/permission-templates/[id]/clone/route.ts
  • src/app/api/permission-templates/[id]/activate/route.ts
  • src/app/api/permission-templates/[id]/deactivate/route.ts
  • src/app/api/user-permissions/route.ts
  • src/app/api/user-permissions/[userId]/route.ts
  • src/app/api/user-permissions/[userId]/assignment/route.ts
  • src/app/api/user-permissions/[userId]/overrides/route.ts
  • src/app/api/user-permissions/[userId]/overrides/[overrideId]/route.ts
  • src/app/api/user-permissions/[userId]/effective/route.ts
  • src/app/api/permission-audit-logs/route.ts
  • docs/role-permission-management-implementation-report.md

3. Files Modified

  • src/lib/auth/session.ts
  • src/lib/auth/page-guards.ts
  • src/config/nav-config.ts

4. API Implemented

Permission Templates

  • GET /api/permission-templates
  • POST /api/permission-templates
  • GET /api/permission-templates/[id]
  • PATCH /api/permission-templates/[id]
  • DELETE /api/permission-templates/[id]
  • POST /api/permission-templates/[id]/clone
  • POST /api/permission-templates/[id]/activate
  • POST /api/permission-templates/[id]/deactivate

Permission Catalog

  • GET /api/permissions/catalog

User Permissions

  • GET /api/user-permissions
  • GET /api/user-permissions/[userId]
  • PUT /api/user-permissions/[userId]/assignment
  • GET /api/user-permissions/[userId]/effective
  • POST /api/user-permissions/[userId]/overrides
  • PATCH /api/user-permissions/[userId]/overrides/[overrideId]
  • DELETE /api/user-permissions/[userId]/overrides/[overrideId]

Permission Audit Logs

  • GET /api/permission-audit-logs

5. UI Pages

  • Permission Templates

    • table + search + pagination + sorting
    • create/edit sheet
    • clone / activate / deactivate / soft delete actions
  • Permission Matrix

    • grouped permission catalog
    • read-only checklist-style layout
  • User Permissions

    • user table + search
    • manage sheet สำหรับ assign template และ allow/deny permissions
    • effective permission preview
  • Permission Audit Logs

    • table + filters ผ่าน query params เดิมของระบบ
    • data source ใหม่จาก permission_audit_logs

6. Remaining TODO

  • เพิ่ม DB-level constraint สำหรับ 1 active template per user per organization
  • เพิ่ม index สำหรับ permission_audit_logs ถ้าข้อมูลโต
  • ปรับ UI assignment ให้รองรับ granular override management แบบแยก create/edit/delete ในหน้าเดียว
  • แสดง target user ใน permission audit log ให้ครบกว่านี้
  • เพิ่ม form-level search/filter สำหรับ permission checklist เมื่อจำนวน permission โตขึ้น
  • เชื่อม default template seed จริงในฐานข้อมูล

7. Known Limitations

  • phase นี้ยังไม่แก้ schema หรือ migration ตาม requirement
  • การบังคับ 1 active template ตอนนี้ทำใน application logic และมี TODO ชัดเจนไว้ใน server layer
  • หน้า User Permissions ใช้ flow แบบ save assignment ทั้งชุดในครั้งเดียวเป็นหลัก แม้ route override แยกจะถูกสร้างไว้แล้ว
  • หน้า Permission Matrix เป็น read-only reference screen ยังไม่ใช่ editor เต็มรูปแบบ
  • หน้า Permission Audit Logs ยังแสดงรายละเอียดแบบย่อ และยังไม่ได้ reuse UI รายการเดิมแบบ 100% ในเชิง component-level

8. Compatibility Status

ยังคง compatibility mode เดิมไว้ทั้งหมด:

  • ไม่ลบ businessRole
  • ไม่ลบ isHRD()
  • ไม่ลบ isIT()
  • ไม่ย้าย feature runtime อื่นไปใช้ permission-first ในรอบนี้
  • ไม่แก้ navigation เดิม ยกเว้นเพิ่มเมนู Permission Management
  • authorization ของหน้าและ API ใหม่ทั้งหมดใช้ super_admin เท่านั้น โดยไม่กระทบ flow เดิมของ HRD / IT / Employee

Verification

ตรวจสอบแล้ว:

  • npx oxlint src/features/permission-management src/app/api/permission-templates src/app/api/user-permissions src/app/api/permissions src/app/api/permission-audit-logs src/app/dashboard/permissions src/config/nav-config.ts src/lib/auth/page-guards.ts src/lib/auth/session.ts ผ่าน
  • npx tsc --noEmit ผ่าน