บทบาทผู้ใช้ (System Role)
ภาพรวม
system_role คือตารางบทบาทที่กำหนดว่าแต่ละ role มีสิทธิ์กับโมดูลใดบ้าง โดยเก็บรายละเอียดสิทธิ์
ไว้ในตาราง system_role_module
ในฝั่ง API โมดูลนี้มีขนาดเล็กมาก เปิดเพียง endpoint เดียวเพื่อทำ dropdown ให้หน้าสร้างและแก้ไขผู้ใช้
เนื่องจากการแก้ไข role และสิทธิ์ไม่ได้ทำผ่าน API นี้ แต่เป็นข้อมูล master ที่ตั้งค่าไว้ในฐานข้อมูล
และถูก override รายองค์กรผ่านตาราง organization_module
role ที่มีความหมายพิเศษในโค้ดคือ roleId == 1 ซึ่งหมายถึง SUPER_ADMIN
และเป็นค่าที่ auth.SuperAdmin() ใช้ตรวจสอบ
Business Flow
- หน้าจัดการผู้ใช้ใน cms-web ต้องการรายการ role เพื่อนำไปแสดงเป็น dropdown
- เรียก
GET /api/system-role/find-all-objectผ่านJwtLoginAuthซึ่งเรียกได้โดยยังไม่ต้องเลือก OA - service query ตาราง
system_roleแล้วคืนโครงสร้างแบบ object/dropdown ตามลำดับเดิมของระบบ NestJS - เมื่อผู้ใช้ถูกสร้างพร้อม
roleIdสิทธิ์ตั้งต้นของผู้ใช้คนนั้นจะมาจากsystem_role_moduleของ role ดังกล่าว - เมื่อ cms-web ต้องการสิทธิ์จริง จะเรียก
GET /api/user/:id/permissionซึ่งรวม baseline ของ role เข้ากับ override ระดับองค์กร
หมายเหตุด้าน parity: @CheckPolicies(read, ORGANIZATION) ถูก comment ไว้ในโค้ด TypeScript ต้นทาง
ฝั่ง Go จึงไม่มี policy annotation บน route นี้เช่นเดียวกัน
ไฟล์และฟังก์ชันหลัก
โค้ดอยู่ที่ internal/modules/systemrole/ ประกอบด้วย controller.go, service.go,
repository.go และ dto.go
| Method | Route | Handler | Guard |
|---|---|---|---|
| GET | /api/system-role/find-all-object | findAllObject(c, svc) | JwtLoginAuth บน group public |
RegisterRoutes ใช้เพียง group public เท่านั้น โดยบรรทัด _ = authed
ยืนยันว่าไม่มีการใช้ group authed
โมดูลข้างเคียงที่ไม่มี route ของตัวเองคือ system_role_module ซึ่งไม่มีโมดูล Go แยกต่างหาก
(controller ฝั่ง TypeScript ก็ว่างเช่นกัน) ข้อมูลถูกอ่านผ่าน relation User.SystemRoleModule
ในโมดูล user
จุดเชื่อมต่อกับ Service อื่น
- Permission — ต้องมี token ที่ผ่าน
JwtLoginAuthโดยไม่จำเป็นต้องมีlineOaIdและไม่มีการตรวจ policy - ตารางที่เกี่ยวข้อง —
system_role,system_role_module - โมดูลที่เกี่ยวข้อง — ทะเบียนโมดูลระบบ (master ของโมดูล), กลไก resolve สิทธิ์และ module gate และการจัดการผู้ใช้งาน CMS ซึ่งเป็นผู้ใช้ dropdown นี้