Skip to main content

บทบาทและสิทธิ์การใช้งานโมดูล

ภาพรวม

ระบบสิทธิ์ออกแบบเป็นแบบ role → module → actions ซึ่งเป็น RBAC อย่างง่ายที่เก็บรายการ action เป็น string คั่นด้วยจุลภาค คำว่า "โมดูล" ในที่นี้หมายถึงฟีเจอร์หนึ่งตัวใน CMS เช่น campaign, rich-menu หรือ audiences โดยชื่อโมดูลในฐานข้อมูลต้องตรงกับ enum PolicyModule ฝั่ง API ทุกตัวอักษร

การให้สิทธิ์มี 2 ชั้นซ้อนกัน คือ system_role_module (สิทธิ์ตามบทบาท) และ organization_module (override ว่าองค์กรนั้นเปิดโมดูลใดบ้าง ทำหน้าที่คล้าย feature flag รายลูกค้า) ผู้ใช้จะเข้าถึงโมดูลได้ก็ต่อเมื่อผ่านทั้งสองชั้น

โครงสร้างข้อมูลหลัก

system_module

ทะเบียนโมดูลทั้งระบบ เก็บ name (ต้องตรงกับฝั่ง API), actions เช่น 'readAll,read,create,update,delete' และ status

system_role

นิยามบทบาท ประกอบด้วย name, type (UserType คือ onemoby หรือ customer), total และ status

บทบาทที่ seed ไว้ตั้งแต่ต้นมีดังนี้

idnametypeหมายเหตุ
1super-adminonemobyสิทธิ์สูงสุดของแพลตฟอร์ม
2adminonemoby
3staffonemoby
4admincustomerผู้ดูแลฝั่งลูกค้า
5staffcustomerเพิ่มภายหลัง มีสิทธิ์เท่า role 4 แต่ตัดโมดูล user และ line-oa ออก

system_role_module

ตารางเชื่อมระหว่างบทบาทกับโมดูล พร้อมระบุ actions ที่บทบาทนั้นทำได้จริง มี FK role_id ไปยัง system_role.id และ module_id ไปยัง system_module.id ตารางนี้ไม่มี deleted_date จึงเป็นการลบจริง

organization_module

สร้างด้วย manual SQL และไม่มีใน Prisma เก็บชุด (organization_id, module_id, actions) ใช้เปิดโมดูลให้แต่ละองค์กรที่เป็น customer-admin เป็นราย ๆ ไป

ข้อควรระวังคือ migration ที่เพิ่มโมดูลใหม่ต้อง insert ข้อมูลเข้าทั้ง system_role_module และ organization_module มิฉะนั้นโมดูลจะไม่ปรากฏให้ลูกค้าใช้งาน ดูตัวอย่างได้ท้ายไฟล์ manual-sql/9.import_mapping.sql

ความเชื่อมโยงกับผู้ใช้เกิดผ่าน user.role_id ที่ชี้ไปยัง system_role.id

ไฟล์ที่เกี่ยวข้อง

  • prisma/schema.prisma:241 — model SystemRole
  • prisma/schema.prisma:261 — model SystemModule
  • prisma/schema.prisma:278 — model SystemRoleModule
  • seed-data/01.system_module.sql — รายชื่อโมดูลทั้งหมด 24 โมดูล พร้อม comment กำกับว่าต้องตรงกับ policy.enum.ts
  • seed-data/02.system_role.sql และ seed-data/03.system_role_module.sql — seed บทบาทและการให้สิทธิ์
  • prisma/migrations/20260727060000_add_customer_staff_role/migration.sql — เพิ่มบทบาท staff ฝั่ง customer
  • manual-sql/9.import_mapping.sql — ตัวอย่างการลงทะเบียนโมดูลใหม่ พร้อม grant ให้ role 1-3 และทุกองค์กร
  • schema-dumps/2026-07-24/schema.sql:2423 — ตาราง organization_module

จุดเชื่อมต่อกับ Service อื่น