Skip to main content

บทบาทผู้ใช้ (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

  1. หน้าจัดการผู้ใช้ใน cms-web ต้องการรายการ role เพื่อนำไปแสดงเป็น dropdown
  2. เรียก GET /api/system-role/find-all-object ผ่าน JwtLoginAuth ซึ่งเรียกได้โดยยังไม่ต้องเลือก OA
  3. service query ตาราง system_role แล้วคืนโครงสร้างแบบ object/dropdown ตามลำดับเดิมของระบบ NestJS
  4. เมื่อผู้ใช้ถูกสร้างพร้อม roleId สิทธิ์ตั้งต้นของผู้ใช้คนนั้นจะมาจาก system_role_module ของ role ดังกล่าว
  5. เมื่อ 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

MethodRouteHandlerGuard
GET/api/system-role/find-all-objectfindAllObject(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 นี้