Skip to main content

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

ภาพรวม

Domain นี้มี 4 ตาราง: system_role (บทบาท), system_module (โมดูล/ฟีเจอร์ในระบบ), system_role_module (สิทธิ์ของบทบาทต่อโมดูล) และ organization_module (การเปิด/จำกัดโมดูล รายองค์กร) สิทธิ์ที่ผู้ใช้ได้จริงคือผลรวมของสิทธิ์ตาม role กับโมดูลที่องค์กรนั้นได้รับอนุญาต

ตาราง system_role

ColumnTypeNullableDefaultคำอธิบาย
idINTEGERNOT NULLnextval (serial)Primary key ของบทบาท
nameTEXTNOT NULLชื่อบทบาท เช่น admin, editor, viewer
totalINTEGERNOT NULL5จำนวนผู้ใช้สูงสุดที่ถือบทบาทนี้ได้
typeUserType (enum)NOT NULLบทบาทนี้ใช้กับผู้ใช้ประเภทใด: onemoby หรือ customer
statusCommonStatus (enum)NOT NULLสถานะบทบาท (active, inactive ฯลฯ)
created_dateTIMESTAMPTZ(3)NOT NULLCURRENT_TIMESTAMPวันที่สร้าง
created_byINTEGERNOT NULL0user id ของผู้สร้าง
updated_dateTIMESTAMPTZ(3)NULLวันที่แก้ไขล่าสุด
updated_byINTEGERNULL0user id ของผู้แก้ไขล่าสุด
deleted_dateTIMESTAMPTZ(3)NULLวันที่ลบแบบ soft delete

ตาราง system_module

ColumnTypeNullableDefaultคำอธิบาย
idINTEGERNOT NULLnextval (serial)Primary key ของโมดูล
nameTEXTNOT NULLชื่อโมดูล/ฟีเจอร์ เช่น import-mapping, campaign
actionsTEXTNOT NULLรายการ action ที่โมดูลนี้รองรับ คั่นด้วยเครื่องหมายจุลภาค เช่น readAll,read,create,update,delete
statusCommonStatus (enum)NOT NULLสถานะโมดูล (active = เปิดใช้ในระบบ)
created_dateTIMESTAMPTZ(3)NOT NULLCURRENT_TIMESTAMPวันที่สร้าง
created_byINTEGERNOT NULL0user id ของผู้สร้าง
updated_dateTIMESTAMPTZ(3)NULLวันที่แก้ไขล่าสุด
updated_byINTEGERNULL0user id ของผู้แก้ไขล่าสุด
deleted_dateTIMESTAMPTZ(3)NULLวันที่ลบแบบ soft delete

ตาราง system_role_module

ColumnTypeNullableDefaultคำอธิบาย
idINTEGERNOT NULLnextval (serial)Primary key
role_idINTEGERNOT NULLบทบาท (FK ไป system_role.id)
module_idINTEGERNOT NULLโมดูล (FK ไป system_module.id)
actionsTEXTNOT NULLaction ที่บทบาทนี้ทำได้กับโมดูลนี้ (subset ของ system_module.actions)
created_dateTIMESTAMPTZ(3)NOT NULLCURRENT_TIMESTAMPวันที่สร้าง
created_byINTEGERNOT NULL0user id ของผู้สร้าง
updated_dateTIMESTAMPTZ(3)NULLวันที่แก้ไขล่าสุด
updated_byINTEGERNULL0user id ของผู้แก้ไขล่าสุด

ตาราง organization_module

ColumnTypeNullableDefaultคำอธิบาย
idINTEGERNOT NULLnextval (serial)Primary key
organization_idINTEGERNOT NULLองค์กร (FK ไป organization.id, ON DELETE CASCADE)
module_idINTEGERNOT NULLโมดูล (FK ไป system_module.id, ON DELETE CASCADE)
actionsTEXTNOT NULLaction ที่องค์กรนี้ได้รับอนุญาตกับโมดูลนี้
created_dateTIMESTAMPTZNOT NULLnow()วันที่สร้าง
updated_dateTIMESTAMPTZNULLวันที่แก้ไขล่าสุด

หมายเหตุ

  • organization_module ไม่มีอยู่ใน schema.prisma และไม่มีไฟล์ migration ที่ track ไว้ — ตารางถูกสร้างตรงบนฐานข้อมูล โครงสร้างข้างต้นดึงมาจาก pg_dump ของ preprod (schema-dumps/2026-07-24/schema.sql) จึงไม่มีคอลัมน์ created_by/updated_by/deleted_date เหมือนตารางอื่นใน domain นี้ และ timestamp เป็น TIMESTAMPTZ (ไม่ระบุ precision 3)
  • Unique constraint: organization_module (organization_id, module_id) — หนึ่งองค์กรมีได้ 1 แถว ต่อโมดูล
  • Foreign key: system_role_module.role_id -> system_role.id, system_role_module.module_id -> system_module.id, organization_module.organization_id -> organization.id, organization_module.module_id -> system_module.id
  • system_role มี index บน deleted_date
  • คอลัมน์ actions ทั้ง 3 ตารางเก็บเป็นสตริงคั่นจุลภาค ไม่ใช่ array หรือ JSON เช่น readAll,read,create,update,delete โดย readAll หมายถึงดูข้อมูลได้ทั้งองค์กร ส่วน read หมายถึงดูเฉพาะรายการของตัวเอง
  • การเพิ่มโมดูลใหม่ต้อง insert ทั้ง system_module, system_role_module (ให้ role ที่เกี่ยวข้อง) และ organization_module (สำหรับองค์กรลูกค้าที่มี override อยู่แล้ว) ดูตัวอย่างได้ที่ manual-sql/9.import_mapping.sql