บทบาทและสิทธิ์การใช้งานโมดูล
ภาพรวม
ระบบสิทธิ์ออกแบบเป็นแบบ 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 ไว้ตั้งแต่ต้นมีดังนี้
| id | name | type | หมายเหตุ |
|---|---|---|---|
| 1 | super-admin | onemoby | สิทธิ์สูงสุดของแพลตฟอร์ม |
| 2 | admin | onemoby | |
| 3 | staff | onemoby | |
| 4 | admin | customer | ผู้ดูแลฝั่งลูกค้า |
| 5 | staff | customer | เพิ่มภายหลัง มีสิทธิ์เท่า 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— modelSystemRoleprisma/schema.prisma:261— modelSystemModuleprisma/schema.prisma:278— modelSystemRoleModuleseed-data/01.system_module.sql— รายชื่อโมดูลทั้งหมด 24 โมดูล พร้อม comment กำกับว่าต้องตรงกับpolicy.enum.tsseed-data/02.system_role.sqlและseed-data/03.system_role_module.sql— seed บทบาทและการให้สิทธิ์prisma/migrations/20260727060000_add_customer_staff_role/migration.sql— เพิ่มบทบาทstaffฝั่ง customermanual-sql/9.import_mapping.sql— ตัวอย่างการลงทะเบียนโมดูลใหม่ พร้อม grant ให้ role 1-3 และทุกองค์กรschema-dumps/2026-07-24/schema.sql:2423— ตารางorganization_module
จุดเชื่อมต่อกับ Service อื่น
- cms-api-go — middleware
ModuleGateอ่านตารางชุดนี้เพื่ออนุญาตหรือปฏิเสธการเข้าถึงแต่ละ route - cms-web — ใช้ผลลัพธ์สิทธิ์ที่ API ส่งกลับมาเพื่อซ่อนหรือแสดงเมนูให้ตรงกับสิ่งที่ผู้ใช้ทำได้จริง
- เชื่อมกับ ผู้ใช้งาน CMS และการยืนยันตัวตน ผ่าน
user.role_idและ องค์กรและแพ็กเกจการใช้งาน ผ่านorganization_module