ตอนนี้อยู่ที่: ห้องสมุดคู่มือ

พาทัวร์หลังบ้าน JPOSไทยENမြန်မာ--:--

ห้องสมุด — คู่มือ J-POS

BOOK 22/25พนักงานและระบบ

จัดการสิทธิ์

ระบบสิทธิ์ (RBAC) คุมว่าพนักงานแต่ละคนเปิดหน้าไหน กดปุ่มไหน และเห็นเมนูไหนได้บ้าง — ผ่าน role 5 แบบตายตัว (เจ้าของ/ผู้จัดการ/รองผู้จัดการ/แคชเชียร์/พนักงานเสิร์ฟ) กับตารางสิทธิ์ 28 รายการที่เจ้าของเปิด-ปิดให้แต่ละ role ได้เองที่หน้า “พนักงาน” แท็บ “สิทธิ์” หน้านี้เป็นจุดควบคุมที่กระทบทุกโมดูลอื่นในระบบ ผิดพลาดตรงนี้ = พนักงานเปิด/ปิดฟีเจอร์ผิดคนได้จริง

6 ขั้นตอน · ภาพหน้าจอจาก J-POS จริง (หน้าจอภาษาไทย)

เปิดหน้าตารางสิทธิ์

  1. เข้าหน้า “พนักงาน” แล้วเปิดแท็บ “สิทธิ์”

    ไปที่เมนู “พนักงาน” (ต้องมีสิทธิ์ staff.manage หรือ permission.manage อย่างใดอย่างหนึ่งถึงจะเห็นหน้านี้) แล้วกดแท็บ “สิทธิ์” — แท็บนี้จะโชว์ก็ต่อเมื่อมีสิทธิ์ permission.manage เท่านั้น ต่างจากแท็บ “พนักงาน” ที่ใช้ staff.manage

    ตารางแสดงเป็นแถว = ฟังก์ชัน/สิทธิ์ แบ่งเป็นหมวด (Order/Bill/Payment/Menu/Inventory/Reports/Admin/Members) คอลัมน์ = role ที่มีอยู่ในระบบ

    role “เจ้าของ” มีป้าย “✦ owner” และช่องติ๊กของ role นี้ทุกแถวจะเป็นเครื่องหมายถูกล็อกตายตัว (เจ้าของมีสิทธิ์ทุกอย่างเสมอ แก้ไม่ได้แม้แต่เจ้าของเองก็ปลดสิทธิ์ตัวเองไม่ได้จากตารางนี้)

    ภาพหน้าจอ J-POS: เข้าหน้า “พนักงาน” แล้วเปิดแท็บ “สิทธิ์”
    เปิดภาพเต็ม
  2. รายการสิทธิ์ทั้งหมดในระบบ แยกตามหมวด พร้อมผลกระทบจริง

    หมวด Order — order.create: สร้าง/แก้ออเดอร์ (ปุ่มพื้นฐาน ไม่ sensitive). order.void_item: ยกเลิกรายการ (sensitive, ต้องใส่ PIN ผู้มีสิทธิ์ก่อนยืนยันทุกครั้ง). order.after_timelock: คีย์ออเดอร์หลังหมดเวลาล็อกออเดอร์ (sensitive, ต้องใส่ PIN)

    หมวด Bill — bill.discount: ให้ส่วนลด (sensitive, ต้องใส่ PIN). bill.refund: คืนเงิน (sensitive, ต้องใส่ PIN — ถ้าร้านเปิดโหมด “ยืนยันคู่” ต้องใช้ PIN คนละคน 2 ครั้ง). bill.close: ปิดบิล (ไม่ sensitive)

    หมวด Payment — payment.confirm: ยืนยันรับเงิน (เต็มสิทธิ์: รับเงิน/เปิด-ปิดกะ/รายงาน) กันทั้งหน้า “กะ” และ “ประวัติบิล”. payment.slip_verify: สแกน/ถ่าย/อัปโหลดสลิปยืนยันยอด (SlipOK), ไม่ sensitive. payment.confirm_no_slip: ปิดบิลโดยไม่มีหลักฐานการชำระ (sensitive, ต้องใส่ PIN). cash.paid_out: อนุมัติเงินออกลิ้นชัก (sensitive, ต้องใส่ PIN)

    หมวด Menu — cost.view: ดูต้นทุน/กำไร — ข้อสำคัญ: ไม่ได้กันทั้งหน้าเมนู แค่เปิด/ปิดแท็บ “ต้นทุน BOM” ในหน้าแก้เมนู. menu.edit: แก้เมนู/สูตร กันทั้งหน้า “แก้เมนู”. recipe.view: ดูเล่มสูตร (ขั้นตอนทำ/รูป — ไม่มีต้นทุน) กันหน้า “เล่มสูตร”. recipe.edit: แก้เล่มสูตร (ขั้นตอน/รูป/โน้ต) — ตั้งเป็น sensitive ในตาราง แต่ปัจจุบันยังเป็นแค่เช็คสิทธิ์ธรรมดา ไม่มีการเด้งกล่อง PIN ตอนกดบันทึก

    หมวด Inventory — inventory.manage: จัดการสต็อก กันรวดเดียวหลายหน้า (สต็อก, รับของ, ของเสีย, ใบสั่งซื้อ, แผนสั่งของ, รายงานสต็อก). stock.count: นับสต็อก (เช็คของจริง) กันหน้า “นับสต็อก”. stock.reconcile: ตรวจ/ปรับสต็อกจากการนับ (sensitive, ต้องใส่ PIN). purchase.manage: จัดการใบสั่งซื้อ/รับของ (PO) กันหน้าใบสั่งซื้อ (มี inventory.manage อยู่แล้วก็เข้าได้เหมือนกัน). purchase.edit: แก้ไข PO ที่บันทึกแล้ว/ย้อนหลัง — ตั้งเป็น sensitive แต่ปัจจุบันเป็นแค่เช็คสิทธิ์ธรรมดา ไม่มี PIN step-up ตรงจุดนี้เช่นกัน

    หมวด Reports — reports.financial: ดูรายงานการเงิน (แท็บประสิทธิภาพ) กันหน้าประวัติกะ. reports.view: ดูรายงานยอดขาย (ไม่รวมแท็บประสิทธิภาพ) กันหน้า “รายงาน” หลัก

    หมวด Admin — staff.manage: จัดการพนักงาน กันแท็บ “พนักงาน”. permission.manage: จัดการสิทธิ์ (sensitive) กันแท็บ “สิทธิ์” หน้าเดียวกันนี้เอง — ไม่มี role ไหนได้รับตามค่าเริ่มต้นเลยนอกจากเจ้าของ. system.admin: ตั้งค่าระบบระดับเจ้าของ (sensitive) กันหน้าที่อ่อนไหวที่สุด 8 หน้า (ตั้งค่าร้าน/ผังร้าน/ผังโต๊ะจอง/นำเข้า-ส่งออกไฟล์/แจ้งเตือนเงินเข้า/เชื่อม JARVIS/Sync/Audit Log) — ไม่มี role ไหนได้รับตามค่าเริ่มต้นนอกจากเจ้าของเช่นกัน. settings.manage: ตั้งค่าระบบ/เครื่องพิมพ์/ผังโต๊ะ (sensitive) กันหน้าอื่นอีกหลายหน้า (โปรโมชัน, สมาชิก, การจอง 3 หน้า, เครื่องพิมพ์, กะ, ประวัติกะ, รายงานส่วนลด) และยังเป็น “สิทธิ์สำรอง” ให้อีกหลายฟังก์ชันย่อยด้วย. audit.view: ดูประวัติกิจกรรม/Audit Log (sensitive) กันหน้า Audit Log โดยตรง — ไม่มี role ไหนได้รับตามค่าเริ่มต้น

    หมวด Members — member.manage: จัดการสมาชิก (เพิ่ม/แก้/ลบ) — ตัวเดียวในกลุ่มนี้ที่มักเห็นติ๊กไว้ให้ role แคชเชียร์อยู่แล้วจริง (ไม่ใช่จากค่าเริ่มต้นตอนติดตั้ง แต่มาจากการอัปเดตระบบที่เสริมสิทธิ์นี้ให้อัตโนมัติ). coupon.manage: จัดการคูปอง (สร้าง/แก้/แจก) — ไม่มี role ไหนได้รับตามค่าเริ่มต้นเลย. points.adjust: ปรับแต้มสมาชิกด้วยตนเอง +/- (sensitive, ต้องใส่ PIN ยืนยันตอนบันทึกจริง) — ไม่มี role ไหนได้รับตามค่าเริ่มต้นเลยเช่นกัน — ทั้ง 3 คีย์นี้กันหน้าสมาชิกร่วมกันแบบ “มีสิทธิ์ใดสิทธิ์หนึ่งก็เข้าได้”. bottle.keep: ฝากเหล้า (ภาพรวม/ต่ออายุ/โอน/ถอน) กันหน้าฝากเหล้าโดยเฉพาะ — ในทางปฏิบัติมักเห็นติ๊กไว้ให้แทบทุก role ที่ไม่ใช่เจ้าของ ผ่านการอัปเดตระบบแบบเดียวกับ member.manage

    ภาพหน้าจอ J-POS: รายการสิทธิ์ทั้งหมดในระบบ แยกตามหมวด พร้อมผลกระทบจริง
    เปิดภาพเต็ม

เปิด/ปิดสิทธิ์ทีละอย่างด้วย checkbox

  1. คลิก checkbox ที่ตำแหน่ง (แถวสิทธิ์ × คอลัมน์ role) เพื่อเปิด/ปิด

    คลิกช่องติ๊กตรงแถวสิทธิ์ที่ต้องการ ตรงกับคอลัมน์ role ที่จะให้/ถอดสิทธิ์นั้น — ระบบบันทึกทันทีโดยไม่ต้องกดปุ่ม “บันทึก” แยก

    สิทธิ์ที่มีป้าย “+PIN” ต่อท้ายชื่อ หมายถึงถูกจัดว่าเป็นสิทธิ์อ่อนไหว (sensitive) ในทะเบียนของระบบ — แต่ไม่ได้แปลว่าทุกตัวจะเด้งกล่องขอ PIN ตอนใช้งานจริงเสมอไป ที่ยืนยันแล้วว่าต้องใส่ PIN จริงตอนกดใช้งาน ได้แก่ order.void_item, order.after_timelock, bill.discount, bill.refund, payment.confirm_no_slip, cash.paid_out, stock.reconcile และ points.adjust ส่วน permission.manage, system.admin, settings.manage, purchase.edit, audit.view มีป้าย +PIN เหมือนกันแต่ปัจจุบันบังคับด้วยการเช็คสิทธิ์ตามปกติเท่านั้น ยังไม่มีกล่องขอ PIN แยกต่างหาก

    การเปลี่ยนสิทธิ์ด้วยวิธีนี้มีผลทันทีกับพนักงานทุกคนที่ถือ role นั้นอยู่ — ทดสอบจริงแล้ว: เปิดสิทธิ์ “ดูรายงานยอดขาย” ให้ role พนักงานเสิร์ฟระหว่างที่มีพนักงานเสิร์ฟ login ค้างอยู่หน้าจออื่น พอหน้าจอนั้นโหลดข้อมูลรอบถัดไป (ไม่ต้อง logout) เมนู “รายงาน” ก็โผล่ขึ้นมาทันที — ไม่ต้องรอ logout/login ใหม่

    ภาพหน้าจอ J-POS: คลิก checkbox ที่ตำแหน่ง (แถวสิทธิ์ × คอลัมน์ role) เพื่อเปิด/ปิด
    เปิดภาพเต็ม

กำหนด role ให้พนักงานแต่ละคน

  1. เลือก role จาก dropdown ในแท็บ “พนักงาน”

    ระบบมี role ตายตัวอยู่ 5 แบบ (เจ้าของ, ผู้จัดการ, รองผู้จัดการ, แคชเชียร์, พนักงานเสิร์ฟ) — ไม่มีปุ่มสร้าง role ใหม่เองในหน้านี้ ถ้าจะเพิ่ม role แบบอื่นต้องแจ้งทีมพัฒนา

    ในแท็บ “พนักงาน” แต่ละแถวพนักงานมีช่อง dropdown เลือก role — เปลี่ยนตรงนี้คือเปลี่ยนว่าพนักงานคนนั้นจะ “ถือชุดสิทธิ์” ของ role ไหน

    ภาพหน้าจอ J-POS: เลือก role จาก dropdown ในแท็บ “พนักงาน”
    เปิดภาพเต็ม

ผลจริงเมื่อสิทธิ์เปลี่ยน — ตัวอย่างที่ทดสอบจริงแล้ว

  1. ตัวอย่าง: role ที่ไม่มีสิทธิ์ดูรายงาน จะไม่เห็นเมนูนั้นเลย

    ทดสอบจริงด้วยการ login เป็นพนักงานเสิร์ฟ (ค่าเริ่มต้นไม่มีสิทธิ์ reports.view) — หน้าเมนูหลักไม่มีการ์ด “รายงาน” ให้กดเลย ไม่ใช่แค่กดไม่ได้ แต่ไม่แสดงผลตั้งแต่แรก

    ถ้าอยากให้ role ไหนเห็นเมนูนี้ ต้องมาเปิดสิทธิ์ reports.view (หรือ settings.manage) ให้ role นั้นในตารางสิทธิ์ก่อน

    ภาพหน้าจอ J-POS: ตัวอย่าง: role ที่ไม่มีสิทธิ์ดูรายงาน จะไม่เห็นเมนูนั้นเลย
    เปิดภาพเต็ม
  2. เปลี่ยน role ของพนักงาน (ไม่ใช่แค่ติ๊กสิทธิ์) ต้องให้พนักงานคนนั้น logout/login ใหม่ ถึงจะเห็นหน้าจอตรงกับสิทธิ์ใหม่

    ทดสอบจริง: เปลี่ยน role พนักงานเสิร์ฟที่ login ค้างอยู่ ให้กลายเป็นผู้จัดการ (จากเมนู “พนักงาน”) — หน้าจอที่พนักงานคนนั้นเปิดค้างไว้ (ไม่ได้ logout) ยังคงแสดงเมนูแบบ role เดิม (ไม่เห็นเมนูรายงานที่ควรจะมีในฐานะผู้จัดการ) เพราะเบราว์เซอร์จำ role ไว้ตั้งแต่ตอน login ครั้งล่าสุด

    แต่ฝั่งเซิร์ฟเวอร์ไม่รอ: ถ้าพนักงานคนนั้นกดปุ่มที่ยิง request ไปเซิร์ฟเวอร์ (เช่น เปิดลิ้นชักเงินสด ซึ่งต้องมีสิทธิ์ payment.confirm) คำสั่งนั้นจะสำเร็จทันทีตามสิทธิ์ role ใหม่ ทั้งที่หน้าจอยังไม่อัปเดต UI ให้เห็นปุ่มนั้นเลยด้วยซ้ำ — สรุปคือ ฝั่งเซิร์ฟเวอร์บังคับสิทธิ์ใหม่ทันทีเสมอ ฝั่งหน้าจอ (ปุ่ม/เมนูที่เห็น) จะตามทันก็ต่อเมื่อพนักงานคนนั้น logout แล้ว login ใหม่เท่านั้น

    จุดที่ทำให้งงเพิ่มอีกชั้น (เห็นในภาพประกอบขั้นตอนนี้): ป้าย role ที่มุมขวาบนของจอ (ช่อง dropdown ข้าง “สิทธิ์”) ดึงข้อมูลสดจาก /api/me ใหม่ทุกครั้งที่โหลดหน้า จึงอาจโชว์ role ใหม่ (เช่น “ผู้จัดการ”) ไปก่อนแล้ว ทั้งที่ปุ่มเข้าระบบด้านขวาสุดยังโชว์ชื่อเดิม และเมนู/การ์ดในหน้ายังเป็นของ role เก่าอยู่ครบ — 3 จุดนี้ไม่ตรงกันชั่วคราวได้จริงจนกว่าจะ logout/login ใหม่

    ข้อควรระวังจากพฤติกรรมนี้: ระหว่างที่ยังไม่ logout พนักงานอาจงงว่าทำไมปุ่ม/เมนูใหม่ยังไม่ขึ้น (role ถูกเปลี่ยนแล้วจริง) — วิธีแก้คือบอกให้ออกจากระบบแล้วเข้าใหม่ทันทีหลังเปลี่ยน role ให้ใคร

    ภาพหน้าจอ J-POS: เปลี่ยน role ของพนักงาน (ไม่ใช่แค่ติ๊กสิทธิ์) ต้องให้พนักงานคนนั้น logout/login ใหม่ ถึงจะเห็นหน้าจอตรงกับสิทธิ์ใหม่
    เปิดภาพเต็ม

จุดที่มักสับสน

  • role “เจ้าของ” ล็อกตายตัว แก้ไม่ได้แม้แต่เจ้าของเอง

    role เจ้าของถือสิทธิ์ “*” (ทุกอย่าง) เสมอ — ในตารางสิทธิ์ ช่องของ role นี้ทุกแถวแสดงเป็นเครื่องหมายถูกล็อก ไม่มีช่องติ๊กให้กด ปลดสิทธิ์เจ้าของออกจากตารางนี้ไม่ได้ไม่ว่าใครจะเป็นคนกด

  • ไม่มีปุ่มสร้าง role ใหม่ — มีแค่ 5 role ตายตัวในระบบ

    หน้านี้ให้แค่เปิด/ปิดสิทธิ์ของ 5 role ที่มีอยู่ (เจ้าของ/ผู้จัดการ/รองผู้จัดการ/แคชเชียร์/พนักงานเสิร์ฟ) เท่านั้น ไม่มีช่องทางเพิ่ม role ใหม่ในตัวระบบเอง คำถาม “สิทธิ์เริ่มต้นของ role ใหม่คืออะไร” จึงไม่มีคำตอบในเวอร์ชันนี้ — ทุก role ที่มีอยู่คือของเดิมตั้งแต่ติดตั้งระบบ ปรับได้แค่ว่าแต่ละ role ถือสิทธิ์อะไรบ้าง

  • เปิด/ปิดสิทธิ์ (checkbox) มีผลทันที — เปลี่ยน role ของพนักงาน (dropdown) ไม่ทันที

    สองอย่างนี้พฤติกรรมต่างกัน: ติ๊กเปิด/ปิดสิทธิ์ในตารางมีผลกับพนักงานที่ถือ role นั้นอยู่ทันที (ทดสอบแล้วเห็นผลในรอบโหลดข้อมูลถัดไปโดยไม่ต้อง logout) แต่การเปลี่ยนว่าพนักงานคนหนึ่งถือ role ไหน (dropdown ในแท็บพนักงาน) จะไม่อัปเดตหน้าจอของพนักงานที่ login ค้างอยู่ทันที ต้องให้เขา logout แล้ว login ใหม่ก่อน ถึงจะเห็น UI ตรงกับ role ใหม่ — แม้ฝั่งเซิร์ฟเวอร์จะบังคับใช้สิทธิ์ใหม่ทันทีอยู่แล้วก็ตาม

  • ป้าย “+PIN” ในตาราง ≠ ทุกตัวจะเด้งกล่อง PIN จริงตอนใช้งาน

    ป้าย +PIN หมายถึงระบบตั้งค่าให้สิทธิ์นั้นเป็น “sensitive” เท่านั้น ที่ยืนยันแล้วว่าเด้งกล่องขอ PIN จริงตอนกดใช้งาน ได้แก่ order.void_item, order.after_timelock, bill.discount, bill.refund, payment.confirm_no_slip, cash.paid_out, stock.reconcile, points.adjust — ส่วน permission.manage, system.admin, settings.manage, purchase.edit, audit.view ก็ติดป้าย +PIN เหมือนกัน แต่ปัจจุบันบังคับด้วยการเช็คสิทธิ์ของ role ตามปกติเท่านั้น ยังไม่มีกล่องขอ PIN แยกต่างหากตอนใช้งานจริง

  • หลาย permission ในหน้าเดียวกันไม่ได้แปลว่าต้องมีครบทุกตัว — บางหน้าเปิดได้ด้วย “สิทธิ์ใดสิทธิ์หนึ่งก็พอ”

    เช่นหน้าสมาชิกเปิดได้ถ้ามีสิทธิ์ใดสิทธิ์หนึ่งใน 4 ตัวนี้: settings.manage, member.manage, coupon.manage, points.adjust (ไม่ต้องมีครบ) เช่นเดียวกับหน้ากะ/ประวัติกะที่เปิดได้ด้วย payment.confirm หรือ settings.manage อย่างใดอย่างหนึ่ง

  • บาง permission กันทั้งหน้า บาง permission กันแค่แท็บ/ปุ่มย่อยในหน้าเดียว

    cost.view เป็นตัวอย่างชัด — ไม่ได้กันทั้งหน้าแก้เมนู (หน้านั้นกันด้วย menu.edit) แต่กันแค่การมองเห็นแท็บ “ต้นทุน BOM” ข้างในหน้าเดียวกัน คนละแบบกับ inventory.manage หรือ menu.edit ที่กันทั้งหน้าเลย

  • หลาย permission ไม่ได้ให้ role ไหนเลยตามค่าเริ่มต้น — เห็นคอลัมน์ว่างทั้งแถวไม่ใช่ระบบพัง

    permission.manage, system.admin, coupon.manage, points.adjust, purchase.edit, audit.view ไม่ถูกให้กับ role ไหนเลยตอนติดตั้งร้านใหม่ (นอกจากเจ้าของที่ได้ทุกอย่างผ่าน “*” อยู่แล้ว) เห็นแถวพวกนี้ว่างทุกคอลัมน์ยกเว้นเจ้าของถือเป็นเรื่องปกติ ต้องมาติ๊กเปิดเองถ้าต้องการมอบสิทธิ์เหล่านี้ให้ role อื่น

  • ตารางสิทธิ์เริ่มต้นที่เห็นในเอกสารนี้เป็นแค่ค่า baseline ตอนติดตั้งร้านใหม่ ไม่ใช่ค่าจริงของร้านที่เปิดใช้งานมานาน

    ร้านที่ใช้งานมาสักพักอาจมีสิทธิ์บางตัว (เช่น reports.view, bottle.keep, member.manage) ถูกเพิ่มให้บาง role โดยอัตโนมัติผ่านการอัปเดตระบบ โดยไม่ปรากฏในค่าเริ่มต้นตอนติดตั้งใหม่ — ตัวอย่างจริงที่เห็นในภาพประกอบข้อ 1: role แคชเชียร์ถือ member.manage อยู่แล้วทั้งที่ค่าเริ่มต้นตอนติดตั้งไม่ได้ให้ — ให้ยึดตารางสิทธิ์จริงที่หน้า “พนักงาน” แท็บ “สิทธิ์” เป็นความจริงเสมอ อย่าอ้างอิงจากเอกสารนี้เพียงอย่างเดียวว่า role หนึ่งมีสิทธิ์อะไรบ้าง ณ วันนี้