สิทธิ์การเข้าถึง (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.view |
เข้าหน้ารายชื่อผู้รับบริการ + เห็นเมนู Sidebar |
Server |
patients.create |
ปุ่ม "เพิ่มผู้รับบริการ" + เข้าฟอร์มเพิ่มใหม่ |
Server |
patients.create |
เข้าหน้าฟอร์มเพิ่มผู้รับบริการใหม่ |
Server |
patients.edit |
เข้าหน้าฟอร์มแก้ไขผู้รับบริการ |
Server |
patients.edit |
ปุ่ม "แก้ไข" + บันทึกข้อมูลผ่าน AJAX |
Server + UI |
patients.delete |
ปุ่ม "ลบ" ผู้รับบริการ |
Server + UI |
appointments.edit |
ปุ่ม "แก้ไข" นัดหมายในแท็บนัดหมายของผู้ป่วย |
UI |
appointments.delete |
ปุ่ม "ลบ" นัดหมายในแท็บนัดหมายของผู้ป่วย |
UI |
สิทธิ์ละเอียด: ห้องตรวจ (rooms)
| สิทธิ์ | ควบคุมส่วนไหน | การบังคับใช้ |
rooms.view |
เข้าหน้าห้องตรวจ + เห็นเมนู Sidebar |
Server |
rooms.edit |
เข้าถึงหน้าจัดการห้องตรวจ + บันทึกข้อมูลห้อง |
Server + AJAX |
rooms.edit |
ตัวแปร CAN_EDIT_ROOM ใน JS — แสดง/ซ่อนปุ่มแก้ไขในหน้า |
UI (JS) |
rooms.create |
เพิ่มข้อมูลห้องตรวจจากฟอร์มรักษา (AJAX) |
AJAX |
rooms.edit |
แก้ไขข้อมูลห้อง + แสดงปุ่มแก้ไข/ลบใน dental chart |
AJAX + UI |
rooms.delete |
ลบข้อมูลห้องจากฟอร์มรักษา (AJAX) |
AJAX |
สิทธิ์ละเอียด: นัดหมาย (appointments)
| สิทธิ์ | ควบคุมส่วนไหน | การบังคับใช้ |
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)
| สิทธิ์ | ควบคุมส่วนไหน | การบังคับใช้ |
| ไม่ต้องมีสิทธิ์ |
แดชบอร์ดแสดงเสมอสำหรับทุก Role (ไม่ตรวจสิทธิ์ view) |
- |
appointments.edit |
ปุ่มแก้ไขนัดหมายด่วน, อัพเดทสถานะนัดหมาย, ปุ่ม "เสร็จสิ้น" |
AJAX + UI |
แดชบอร์ดเป็นหน้าเดียวที่แสดงเสมอโดยไม่ตรวจสิทธิ์ view แต่ปุ่มดำเนินการยังตรวจสิทธิ์ appointments.edit
สิทธิ์ละเอียด: การเงิน (billing)
| สิทธิ์ | ควบคุมส่วนไหน | การบังคับใช้ |
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.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.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.view |
เข้าหน้า Hub รายงาน + เห็นเมนู Sidebar |
reports/index.php |
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 |
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 |
reports.appointment_report |
การนัดหมาย |
reports/appointment_report.php |
reports.new_patient |
สรุปผู้รับบริการใหม่ |
reports/new_patient.php |
reports.data_record |
การบันทึกข้อมูล |
reports/data_record.php |
reports.drug_inventory |
คลังยาและวัชภัณฑ์ |
reports/drug_inventory.php |
reports.drug_import |
ประวัตินำเข้ายา |
reports/drug_import.php |
reports.drug_export |
ประวัติจ่ายยา |
reports/drug_export.php |
reports.access_history |
ประวัติการใช้งาน |
reports/access_history.php |
แต่ละรายงานมีทั้ง การบังคับใช้ Server (requirePermission ที่ตัว PHP ของรายงาน) และ UI (ซ่อนลิงก์ในหน้า Hub) — หากไม่มีสิทธิ์แม้แต่ตัวเดียวในหมวด ทั้ง section จะถูกซ่อน
สิทธิ์ละเอียด: ตั้งค่า (settings)
| สิทธิ์ | ควบคุมส่วนไหน | การบังคับใช้ |
settings.view |
เข้าหน้า Hub ตั้งค่า + เห็นเมนู Sidebar |
Server |
settings.create |
ปุ่ม "เพิ่ม" ในหน้าย่อยตั้งค่าต่างๆ (การรักษา, หมวดหมู่, ห้อง, สาขา ฯลฯ) |
UI |
settings.edit |
ปุ่ม "แก้ไข" + บันทึกข้อมูลในหน้าย่อยตั้งค่า |
UI |
settings.delete |
ปุ่ม "ลบ" ในหน้าย่อยตั้งค่า |
UI |
users.view |
ลิงก์ "ผู้ใช้งาน" ใน Hub ตั้งค่า |
UI |
สิทธิ์ละเอียด: ผู้ใช้งาน (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)
| โมดูล | view | create | edit | delete |
| patients | patients.view | patients.create | patients.edit | patients.delete |
| rooms | rooms.view | rooms.create | rooms.edit | rooms.delete |
| appointments | appointments.view | appointments.create | appointments.edit | appointments.delete |
| billing | billing.view | billing.create | billing.edit | billing.delete |
| medicines | medicines.view | medicines.create | medicines.edit | medicines.delete |
| management | management.view | management.create | management.edit | management.delete |
| reports | reports.view | reports.create | reports.edit | reports.delete |
| settings | settings.view | settings.create | settings.edit | settings.delete |
| users | users.view | users.create | users.edit | users.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_scope | Doctor Scope ระดับ Role | role_key + module |
user_doctor_scope | Doctor Scope ระดับผู้ใช้ (Override) | user_key + module + is_active |