สิทธิ์ & Roles

16

สิทธิ์การเข้าถึง (Roles & Permissions)

คู่มือฉบับสมบูรณ์ — ระบบ Role-based Access Control ควบคุมการเข้าถึงทุกโมดูล ทุกปุ่ม ทุกรายงานอย่างละเอียด

ภาพรวมระบบสิทธิ์

ระบบสิทธิ์ของ Alicia ใช้แนวคิด Role-based Access Control (RBAC) โดยแต่ละ Role จะกำหนดสิทธิ์การเข้าถึงโมดูลต่างๆ ของระบบ ผู้ใช้แต่ละคนจะถูกกำหนด Role และได้รับสิทธิ์ตาม Role นั้นๆ

สร้าง Role
กำหนดสิทธิ์
กำหนด Role ให้ผู้ใช้
ผู้ใช้ได้สิทธิ์ตาม Role

การบังคับใช้สิทธิ์ 3 ระดับ

ระดับวิธีการคำอธิบาย
Server requirePermission() ป้องกันการเข้าถึงหน้าเพจ — หากไม่มีสิทธิ์จะถูกเปลี่ยนเส้นทางไปหน้า Dashboard ทันที
AJAX requirePermissionAjax() ป้องกันการทำรายการผ่าน AJAX POST — คืน JSON error หากไม่มีสิทธิ์
UI hasPermission() ซ่อน/แสดงปุ่มและส่วนต่างๆ ของหน้าตาม UI — ลดความสับสนให้ผู้ใช้
Admin ได้รับสิทธิ์ทุกอย่างอัตโนมัติ (bypass) โดยดูจาก Role ที่ตั้งค่า is_admin = true เท่านั้น

4 บทบาทเริ่มต้น

ระบบมี 4 บทบาทเริ่มต้นที่สร้างมาให้พร้อมใช้งาน สามารถแก้ไขสิทธิ์ได้ตามต้องการ และสร้างบทบาทใหม่เพิ่มเติมได้

บทบาทสีคำอธิบายเป็นค่าเริ่มต้น
Admin แดง ผู้ดูแลระบบสูงสุด — Bypass สิทธิ์ทั้งหมด มีสิทธิ์ทุกอย่างอัตโนมัติ -
Staff ม่วง เจ้าหน้าที่คลินิก — จัดการผู้ป่วย นัดหมาย ดูข้อมูลทั่วไป ใช่ (ผู้ใช้ใหม่จะได้ Role นี้)
Dentist เขียว ทันตแพทย์ — จัดการห้องตรวจ นัดหมาย ดูเฉพาะข้อมูลตัวเอง (Doctor Scope) -
Cashier ส้ม แคชเชียร์ — จัดการการเงิน คลังยา -

ตารางเปรียบเทียบสิทธิ์เริ่มต้น

โมดูล Admin Staff Dentist Cashier
ผู้รับบริการ patients ทั้งหมด view, create, edit view view
ห้องตรวจ rooms ทั้งหมด view view, create, edit -
นัดหมาย appointments ทั้งหมด view, create, edit, delete view, create, edit view
การเงิน billing ทั้งหมด view - view, create, edit
คลังยา medicines ทั้งหมด view - view, create, edit
การจัดการ management ทั้งหมด view - -
รายงาน reports ทั้งหมด view view -
ตั้งค่า settings ทั้งหมด - - -
ผู้ใช้งาน users ทั้งหมด - - -
Dentist จะเปิดใช้ Doctor Scope อัตโนมัติ ทำให้เห็นเฉพาะข้อมูลของตัวเองในโมดูล ผู้รับบริการ, ห้องตรวจ และรายงาน

โครงสร้างสิทธิ์ (Module + Action)

สิทธิ์ในระบบ Alicia ประกอบด้วย 2 ส่วน:

  • Module (โมดูล): เมนูหรือหน้าที่ต้องการควบคุม
  • Action (การดำเนินการ): สิ่งที่ผู้ใช้ทำได้กับโมดูลนั้น

รูปแบบ: module.action เช่น patients.view, billing.edit_receipt

4 Action พื้นฐาน (ทุกโมดูล)

Actionคำอธิบายตัวอย่าง
view ดูข้อมูล เข้าถึงหน้าเพจ patients.view = เข้าหน้ารายชื่อผู้ป่วย
create สร้าง/เพิ่มข้อมูลใหม่ appointments.create = เพิ่มนัดหมายใหม่
edit แก้ไขข้อมูลที่มีอยู่ billing.edit = แก้ไขรายการชำระเงิน
delete ลบข้อมูล patients.delete = ลบข้อมูลผู้ป่วย

สิทธิ์พิเศษเพิ่มเติม (Extra Actions)

บางโมดูลมีสิทธิ์เพิ่มเติมนอกเหนือจาก 4 ตัวพื้นฐาน:

โมดูลสิทธิ์พิเศษจำนวน
การเงิน แก้ไขใบเสร็จ, ยกเลิกใบเสร็จ, ลบใบเสร็จ, แก้ไขส่วนแบ่ง, ลบส่วนแบ่ง 5 สิทธิ์
คลังยา นำเข้า, จ่ายออก, แสดงยอดคงเหลือ, ประวัติ 4 สิทธิ์
รายงาน สิทธิ์แยกทีละรายงาน 5 หมวด (รายได้, พิเศษ, สถิติ, คลังยา, อื่นๆ) 17 สิทธิ์

สิทธิ์ละเอียด: ผู้รับบริการ (patients)

ผู้รับบริการ (patients)
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
หน้ารายชื่อผู้รับบริการ (patients/index.php)
patients.view เข้าหน้ารายชื่อผู้รับบริการ + เห็นเมนู Sidebar Server
patients.create ปุ่ม "เพิ่มผู้รับบริการ" + เข้าฟอร์มเพิ่มใหม่ Server
ฟอร์มเพิ่ม/แก้ไข (patients/add.php)
patients.create เข้าหน้าฟอร์มเพิ่มผู้รับบริการใหม่ Server
patients.edit เข้าหน้าฟอร์มแก้ไขผู้รับบริการ Server
หน้ารายละเอียด (patients/view.php)
patients.edit ปุ่ม "แก้ไข" + บันทึกข้อมูลผ่าน AJAX Server + UI
patients.delete ปุ่ม "ลบ" ผู้รับบริการ Server + UI
appointments.edit ปุ่ม "แก้ไข" นัดหมายในแท็บนัดหมายของผู้ป่วย UI
appointments.delete ปุ่ม "ลบ" นัดหมายในแท็บนัดหมายของผู้ป่วย UI

สิทธิ์ละเอียด: ห้องตรวจ (rooms)

ห้องตรวจ (rooms)
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
หน้าห้องตรวจหลัก (rooms/index.php)
rooms.view เข้าหน้าห้องตรวจ + เห็นเมนู Sidebar Server
rooms.edit เข้าถึงหน้าจัดการห้องตรวจ + บันทึกข้อมูลห้อง Server + AJAX
rooms.edit ตัวแปร CAN_EDIT_ROOM ใน JS — แสดง/ซ่อนปุ่มแก้ไขในหน้า UI (JS)
หน้าบันทึกการรักษา (medical_records/treatment.php)
rooms.create เพิ่มข้อมูลห้องตรวจจากฟอร์มรักษา (AJAX) AJAX
rooms.edit แก้ไขข้อมูลห้อง + แสดงปุ่มแก้ไข/ลบใน dental chart AJAX + UI
rooms.delete ลบข้อมูลห้องจากฟอร์มรักษา (AJAX) AJAX

สิทธิ์ละเอียด: นัดหมาย (appointments)

นัดหมาย (appointments)
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
หน้าปฏิทิน + รายการนัดหมาย (appointments/index.php)
appointments.view เข้าหน้าปฏิทินนัดหมาย + เห็นเมนู Sidebar Server
appointments.create ปุ่ม "เพิ่มนัดหมาย" + คลิกช่องว่างในปฏิทิน UI
appointments.edit ลาก (drag & drop) ย้ายนัดหมาย, ลากขอบล่าง (resize) ขยาย/ลดเวลา, ปุ่มแก้ไข, ปุ่ม flag, เปลี่ยนสถานะ AJAX + UI
appointments.delete ปุ่ม "ลบ" นัดหมาย + ปุ่ม "ยกเลิก" ใน List view AJAX + UI
จากหน้าอื่นที่ใช้สิทธิ์นัดหมาย
appointments.edit แดชบอร์ด: ปุ่มแก้ไขนัดหมาย, อัพเดทสถานะนัดด่วน, เปลี่ยนสถานะ "เสร็จสิ้น" AJAX + UI
appointments.edit หน้าผู้ป่วย (view.php): ปุ่ม "แก้ไข" นัดหมายในแท็บ UI
appointments.delete หน้าผู้ป่วย (view.php): ปุ่ม "ลบ" นัดหมายในแท็บ UI
นัดหมายที่มีสถานะ "กำลังรักษา", "รอชำระ" หรือ "เสร็จสิ้น" จะล็อคไม่ให้ลากหรือ resize โดยไม่ขึ้นกับสิทธิ์

สิทธิ์ละเอียด: แดชบอร์ด (dashboard)

แดชบอร์ด (dashboard)
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
ไม่ต้องมีสิทธิ์ แดชบอร์ดแสดงเสมอสำหรับทุก Role (ไม่ตรวจสิทธิ์ view) -
appointments.edit ปุ่มแก้ไขนัดหมายด่วน, อัพเดทสถานะนัดหมาย, ปุ่ม "เสร็จสิ้น" AJAX + UI
แดชบอร์ดเป็นหน้าเดียวที่แสดงเสมอโดยไม่ตรวจสิทธิ์ view แต่ปุ่มดำเนินการยังตรวจสิทธิ์ appointments.edit

สิทธิ์ละเอียด: การเงิน (billing)

การเงิน (billing) — 4 สิทธิ์พื้นฐาน + 5 สิทธิ์พิเศษ
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
สิทธิ์พื้นฐาน
billing.view เข้าหน้ารายการการเงิน + เห็นเมนู Sidebar Server
billing.create ปุ่ม "เพิ่ม" รายการชำระเงิน UI
billing.edit เข้าหน้าชำระเงิน (pay.php) Server + UI
billing.delete ปุ่ม "ลบ" รายการชำระเงิน UI
สิทธิ์พิเศษ: ใบเสร็จ
billing.edit_receipt ปุ่ม "แก้ไขใบเสร็จ" ในรายการ + เข้าหน้า edit_receipt.php Server + UI
billing.cancel_receipt เข้าหน้ายกเลิกใบเสร็จ (cancel_receipt.php) Server
billing.delete_receipt ลบใบเสร็จ Server
สิทธิ์พิเศษ: ส่วนแบ่งทันตแพทย์
billing.edit_doctor_share แก้ไขส่วนแบ่งทันตแพทย์ในหน้าชำระเงิน (pay.php) และหน้าแก้ไขใบเสร็จ (edit_receipt.php) AJAX
billing.delete_doctor_share ลบส่วนแบ่งทันตแพทย์ในหน้าชำระเงินและหน้าแก้ไขใบเสร็จ AJAX
สิทธิ์ billing.edit_receipt และ billing.cancel_receipt ยังแสดงเป็นลิงก์ในหน้า การจัดการ (management) ด้วย — ซ่อนลิงก์หากไม่มีสิทธิ์

สิทธิ์ละเอียด: คลังยาและสินค้า (medicines)

คลังยาและสินค้า (medicines) — 4 สิทธิ์พื้นฐาน + 4 สิทธิ์พิเศษ
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
สิทธิ์พื้นฐาน
medicines.view เข้าหน้าคลังยา + เห็นเมนู Sidebar Server
medicines.create ปุ่ม "เพิ่ม" ยา/สินค้า UI
medicines.edit ปุ่ม "แก้ไข" ยา/สินค้า UI
medicines.delete ปุ่ม "ลบ" ยา/สินค้า UI
สิทธิ์พิเศษ
medicines.import ปุ่ม "นำเข้า" + ฟอร์มนำเข้ายาเข้าคลัง (AJAX add mode) AJAX + UI
medicines.export ปุ่ม "จ่ายออก" + ฟอร์มจ่ายยาออกจากคลัง (AJAX sub mode) AJAX + UI
medicines.stock_balance คอลัมน์ "ยอดคงเหลือ" ในตารางยาทั้ง 5 ตาราง (ยา, สินค้า, วัสดุ, อื่นๆ, ขายสินค้า) UI
medicines.history แท็บ "ประวัติ" + ปุ่มดูประวัติรายการนำเข้า/จ่ายออก (4 จุดในหน้า) UI

สิทธิ์ละเอียด: การจัดการ (management)

การจัดการ (management)
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
หน้า Hub หลัก (management/index.php)
management.view เข้าหน้า Hub การจัดการ + เห็นเมนู Sidebar Server
billing.edit_receipt ลิงก์ "แก้ไขใบเสร็จ" ใน Hub UI
billing.cancel_receipt ลิงก์ "ยกเลิกใบเสร็จ" ใน Hub UI
หน้าย่อยทั้งหมด (ใช้แพทเทิร์นเดียวกัน)
management.view เข้าถึงแต่ละหน้าย่อย: แผนการรักษา, ประวัติรักษา, ตารางหมอ, เงินเดือน, ค่าคอม, ค่าใช้จ่าย, ติดตามการรักษา, คูปอง, พิมพ์คูปอง, สลิปเงินเดือน, รายงานเงินเดือน, รายงานค่าใช้จ่าย Server
management.edit บันทึก/อัพเดทข้อมูลในทุกหน้าย่อย (AJAX POST) + ปุ่ม "แก้ไข" ใน UI AJAX + UI
management.create ปุ่ม "เพิ่ม" ในหน้าย่อยที่รองรับ UI
management.delete ปุ่ม "ลบ" ในหน้าย่อย UI
หน้าย่อยในโมดูลการจัดการทุกหน้าใช้ management.view เป็นตัวกรองเข้า และ management.edit สำหรับการบันทึกข้อมูลผ่าน AJAX

สิทธิ์ละเอียด: รายงาน (reports) — 17 สิทธิ์ย่อย

โมดูลรายงานมีสิทธิ์แยกสำหรับทุกรายงาน เปิด/ปิดได้ทีละตัวในหน้าตั้งค่าบทบาท แบ่งเป็น 5 หมวด พร้อมปุ่มเลือกทั้งหมวด (select-all)

รายงาน (reports) — สิทธิ์พื้นฐาน + 17 สิทธิ์รายงาน
สิทธิ์รายงาน/ส่วนที่ควบคุมหน้าที่ใช้
สิทธิ์พื้นฐาน
reports.view เข้าหน้า Hub รายงาน + เห็นเมนู Sidebar reports/index.php
หมวด 1: รายงานรายได้ (6 รายการ)
reports.daily_income รายงานรายได้ reports/daily_income.php
reports.category_income รายได้แยกตามหมวดหมู่ reports/category_income.php
reports.summary_income สรุปรายได้ reports/summary_income.php
reports.category_income_summary สรุปรายได้ตามหมวดหมู่ reports/category_income_summary.php
reports.doctor_share ส่วนแบ่งทันตแพทย์ reports/doctor_share.php
reports.doctor_share_summary สรุปส่วนแบ่งทันตแพทย์ reports/doctor_share_summary.php
หมวด 2: รายงานรายได้พิเศษ (4 รายการ)
reports.tax_daily_income รายงานรายได้ (พิเศษ) reports/tax_daily_income.php
reports.tax_category_income รายได้แยกตามหมวดหมู่ (พิเศษ) reports/tax_category_income.php
reports.tax_doctor_share ส่วนแบ่งทันตแพทย์ (พิเศษ) reports/tax_doctor_share.php
reports.receipt_audit ตรวจสอบใบเสร็จ reports/receipt_audit.php
หมวด 3: รายงานเกี่ยวกับสถิติ (3 รายการ)
reports.appointment_report การนัดหมาย reports/appointment_report.php
reports.new_patient สรุปผู้รับบริการใหม่ reports/new_patient.php
reports.data_record การบันทึกข้อมูล reports/data_record.php
หมวด 4: รายงานจำนวนยาและวัชภัณฑ์คงเหลือ (3 รายการ)
reports.drug_inventory คลังยาและวัชภัณฑ์ reports/drug_inventory.php
reports.drug_import ประวัตินำเข้ายา reports/drug_import.php
reports.drug_export ประวัติจ่ายยา reports/drug_export.php
หมวด 5: รายงานอื่น ๆ (1 รายการ)
reports.access_history ประวัติการใช้งาน reports/access_history.php
แต่ละรายงานมีทั้ง การบังคับใช้ Server (requirePermission ที่ตัว PHP ของรายงาน) และ UI (ซ่อนลิงก์ในหน้า Hub) — หากไม่มีสิทธิ์แม้แต่ตัวเดียวในหมวด ทั้ง section จะถูกซ่อน

สิทธิ์ละเอียด: ตั้งค่า (settings)

ตั้งค่า (settings)
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
settings.view เข้าหน้า Hub ตั้งค่า + เห็นเมนู Sidebar Server
settings.create ปุ่ม "เพิ่ม" ในหน้าย่อยตั้งค่าต่างๆ (การรักษา, หมวดหมู่, ห้อง, สาขา ฯลฯ) UI
settings.edit ปุ่ม "แก้ไข" + บันทึกข้อมูลในหน้าย่อยตั้งค่า UI
settings.delete ปุ่ม "ลบ" ในหน้าย่อยตั้งค่า UI
users.view ลิงก์ "ผู้ใช้งาน" ใน Hub ตั้งค่า UI

สิทธิ์ละเอียด: ผู้ใช้งาน (users)

ผู้ใช้งาน (users)
สิทธิ์ควบคุมส่วนไหนการบังคับใช้
users.view เข้าหน้ารายชื่อผู้ใช้งาน + ลิงก์ใน Hub ตั้งค่า Server + UI
users.create ปุ่ม "เพิ่ม" ผู้ใช้งานใหม่ UI
users.edit ปุ่ม "แก้ไข" ผู้ใช้งาน + กำหนด Role + กำหนดสิทธิ์เฉพาะผู้ใช้ UI
users.delete ปุ่ม "ลบ" ผู้ใช้งาน UI

สิทธิ์ view ของแต่ละโมดูลควบคุมการแสดงผลเมนูใน Sidebar โดยตรง:

เมนูสิทธิ์ที่ตรวจหมายเหตุ
แดชบอร์ด แสดงเสมอ ไม่ตรวจสิทธิ์ — ทุก Role เห็น
ผู้รับบริการ patients.view ซ่อนถ้าไม่มีสิทธิ์
ห้องตรวจ rooms.view ซ่อนถ้าไม่มีสิทธิ์
นัดหมาย appointments.view ซ่อนถ้าไม่มีสิทธิ์
การเงิน billing.view ซ่อนถ้าไม่มีสิทธิ์ + มี badge จำนวนรอชำระ
คลังยา medicines.view ซ่อนถ้าไม่มีสิทธิ์
การจัดการ management.view ซ่อนถ้าไม่มีสิทธิ์
รายงาน reports.view ซ่อนถ้าไม่มีสิทธิ์
ตั้งค่า settings.view ซ่อนถ้าไม่มีสิทธิ์
เคล็ดลับ: หากผู้ใช้ไม่เห็นเมนูบางรายการ ให้ตรวจสอบสิทธิ์ view ของโมดูลนั้นใน Role หรือสิทธิ์เฉพาะผู้ใช้

Doctor Scope — จำกัดข้อมูลเฉพาะทันตแพทย์

Doctor Scope คือระบบจำกัดขอบเขตข้อมูลที่แยกจากสิทธิ์ปกติ — แม้มีสิทธิ์ view แต่ถ้าเปิด Scope จะเห็นเฉพาะข้อมูลของตัวเอง

patients — เห็นเฉพาะผู้ป่วยของตัวเอง
แสดงเฉพาะผู้ป่วยที่ทันตแพทย์คนนี้เคยทำการรักษา
rooms — เห็นเฉพาะนัดหมายของตัวเอง
แสดงเฉพาะผู้ป่วยที่มีนัดหมายกับทันตแพทย์คนนี้ในห้องตรวจ
reports — เห็นเฉพาะรายงานส่วนแบ่งของตัวเอง
จาก 17+ รายงาน จะเห็นเฉพาะ 3 รายงาน: ส่วนแบ่งทันตแพทย์, สรุปส่วนแบ่ง, ส่วนแบ่ง (พิเศษ) — ซ่อนรายงานรายได้, สถิติ, คลังยา, อื่นๆ ทั้งหมด

การทำงานของ Doctor Scope

ลำดับเงื่อนไขคำอธิบาย
1 ตรวจ Role Admin จะข้าม Doctor Scope เสมอ (ไม่ถูกจำกัด)
2 ตรวจ doctor_key ผู้ใช้ต้องเชื่อมกับทันตแพทย์ (มี doctor_key) ถึงจะเปิดใช้ Scope ได้
3 ตรวจ Scope ของ Role ดูจากตาราง role_doctor_scope — ตั้งค่าในหน้า Role
4 Override ต่อผู้ใช้ ใช้ตาราง user_doctor_scope เปิด/ปิดเฉพาะบุคคลได้
Role Dentist จะเปิด Doctor Scope ทุกโมดูลอัตโนมัติ (patients, rooms, reports) สามารถปิดเฉพาะบุคคลได้ในหน้าจัดการผู้ใช้

สิทธิ์เฉพาะผู้ใช้ (User-specific Overrides)

นอกจากสิทธิ์ที่ได้จาก Role แล้ว ยังสามารถกำหนดสิทธิ์เพิ่มเติมเฉพาะผู้ใช้แต่ละคนได้:

ประเภทที่มาตารางการแสดงผล
สิทธิ์จาก Role ได้รับอัตโนมัติจาก Role ที่กำหนด role_permissions checkbox ปกติ
สิทธิ์เฉพาะผู้ใช้ กำหนดเพิ่มเป็นพิเศษเฉพาะคนนี้ user_permissions badge สีน้ำเงิน

ตัวอย่างการใช้งาน

  • Staff ท่านหนึ่งต้องจัดการค่าใช้จ่าย: เพิ่มสิทธิ์ management.edit เฉพาะคนนี้
  • Dentist ท่านหนึ่งต้องดูรายงานรายได้: เพิ่มสิทธิ์ reports.daily_income เฉพาะคนนี้
  • Cashier ท่านหนึ่งต้องแก้ไขใบเสร็จ: เพิ่มสิทธิ์ billing.edit_receipt เฉพาะคนนี้
สิทธิ์เฉพาะผู้ใช้จะรวมกับสิทธิ์จาก Role (union) — ผู้ใช้จะได้รับสิทธิ์จากทั้ง 2 แหล่ง ไม่สามารถใช้เพื่อ "ลบ" สิทธิ์จาก Role ได้

สร้าง / แก้ไข / ลบ Role

สร้าง Role ใหม่

กดปุ่ม "สร้าง Role ใหม่" เปิดฟอร์มสร้างบทบาทใหม่
ตั้งชื่อ Role + เลือกสี พิมพ์ชื่อบทบาท เช่น "ผู้ช่วยทันตแพทย์", เลือกสี, ใส่คำอธิบาย
กำหนดสิทธิ์พื้นฐาน ติ๊กเลือก view/create/edit/delete สำหรับแต่ละโมดูล
กำหนดสิทธิ์พิเศษ ติ๊กเลือกสิทธิ์พิเศษ: ใบเสร็จ, ส่วนแบ่ง, คลังยา, รายงานแยกทีละตัว (มี select-all ต่อหมวด)
กำหนด Doctor Scope (ถ้าต้องการ) เลือกโมดูลที่ต้องจำกัดข้อมูลเฉพาะทันตแพทย์
บันทึก Role ใหม่พร้อมใช้งาน สามารถกำหนดให้ผู้ใช้ได้ทันที

แก้ไข Role

คลิกที่ Role ที่ต้องการแก้ไข ปรับเปลี่ยนสิทธิ์ แล้วกดบันทึก การเปลี่ยนแปลงจะมีผลกับผู้ใช้ทุกคนที่อยู่ใน Role นี้ทันที

ลบ Role

สามารถลบ Role ที่ไม่ใช้งานแล้วได้ ระบบจะย้ายผู้ใช้ที่อยู่ใน Role นั้นไปยัง Role เริ่มต้น (Staff) อัตโนมัติ

การย้ายจากระบบสิทธิ์เดิม

หากระบบเดิมใช้การกำหนดสิทธิ์แบบเก่า (ไม่มี Role) ระบบ Alicia จะทำการย้ายข้อมูลอัตโนมัติ:

ตรวจสอบสิทธิ์เดิม ระบบจะอ่านสิทธิ์ที่ผู้ใช้แต่ละคนมีอยู่ในระบบเดิม (access_list / access_user)
จับคู่กับ Role user_class ≥ 2 หรือ admin access → Admin, access_group = 2 → Dentist, ที่เหลือ → Staff
ดูตัวอย่าง (Preview) Admin สามารถ preview ผลลัพธ์การย้ายก่อนดำเนินการจริง
ดำเนินการย้าย กดปุ่ม "Execute Migration" เพื่อกำหนด Role ให้ผู้ใช้ทุกคน
การย้ายจะเกิดขึ้นอัตโนมัติเมื่อระบบตรวจพบว่ายังไม่มี Role ใดๆ ในฐานข้อมูล หลังจากนั้นระบบจะใช้ Role-based เป็นหลัก

รายการสิทธิ์ทั้งหมด (Quick Reference)

สิทธิ์พื้นฐาน (36 สิทธิ์ = 9 โมดูล x 4 actions)

โมดูลviewcreateeditdelete
patientspatients.viewpatients.createpatients.editpatients.delete
roomsrooms.viewrooms.createrooms.editrooms.delete
appointmentsappointments.viewappointments.createappointments.editappointments.delete
billingbilling.viewbilling.createbilling.editbilling.delete
medicinesmedicines.viewmedicines.createmedicines.editmedicines.delete
managementmanagement.viewmanagement.createmanagement.editmanagement.delete
reportsreports.viewreports.createreports.editreports.delete
settingssettings.viewsettings.createsettings.editsettings.delete
usersusers.viewusers.createusers.editusers.delete

สิทธิ์พิเศษการเงิน (5 สิทธิ์)

billing.edit_receipt billing.cancel_receipt billing.delete_receipt billing.edit_doctor_share billing.delete_doctor_share

สิทธิ์พิเศษคลังยา (4 สิทธิ์)

medicines.import medicines.export medicines.stock_balance medicines.history

สิทธิ์รายงาน (17 สิทธิ์)

reports.daily_income reports.category_income reports.summary_income reports.category_income_summary reports.doctor_share reports.doctor_share_summary reports.tax_daily_income reports.tax_category_income reports.tax_doctor_share reports.receipt_audit reports.appointment_report reports.new_patient reports.data_record reports.drug_inventory reports.drug_import reports.drug_export reports.access_history

รวมทั้งหมด: 62 สิทธิ์ — 36 สิทธิ์พื้นฐาน + 5 การเงิน + 4 คลังยา + 17 รายงาน

ตารางฐานข้อมูลที่เกี่ยวข้อง

ตารางหน้าที่คีย์หลัก
rolesรายการบทบาท (ชื่อ, สี, คำอธิบาย, is_admin, is_default)role_key (CHAR 32)
role_permissionsสิทธิ์ของแต่ละ Role (module + action)role_key + module + action
user_permissionsสิทธิ์เพิ่มเติมเฉพาะผู้ใช้ (Override)user_key + module + action
role_doctor_scopeDoctor Scope ระดับ Rolerole_key + module
user_doctor_scopeDoctor Scope ระดับผู้ใช้ (Override)user_key + module + is_active