จัดกลุ่มผู้ใช้ ข้อความระบบ และสิทธิ์รายเมนู
4 จอที่อยู่ในไฟล์เดียวกัน ExtraAdminScreens.tsx ทั้งหมดอยู่ในพื้นที่ /admin (ศูนย์จัดการระบบ Admin: ผู้ใช้ ผู้ให้บริการ ฐานข้อมูล สิทธิ์เข้าฐาน (UsersScreen, ProvidersScreen, DatabasesScreen, DataAccessScreen, DataGroupsScreen, DatabaseInfoScreen)) และห่อด้วย ProviderScopedScreen คือต้องเลือก Provider ก่อน ไม่มีคีย์ลัด Ctrl+S / Esc
วิธีเปิด
| จอ | path | ชื่อเมนูในหน้า /admin |
|---|---|---|
| UserGroupsScreen | /admin/user-groups |
จัดกลุ่มผู้ใช้ |
| SystemTextScreen | /admin/system-text |
เปลี่ยนข้อความในระบบ |
| GroupPermissionScreen | /admin/group-permission |
กำหนดสิทธิ์กลุ่มใช้งาน |
| DataPermissionScreen | /admin/data-permission |
กำหนดการเข้าถึงข้อมูล |
การจับคู่ path -> เมนู มาจาก adminMenu.ts และเพจใต้ src/app/(admin)/admin/*/page.tsx (ต้องเป็นโหมดผู้ดูแลระบบ ดู ศูนย์จัดการระบบ Admin: ผู้ใช้ ผู้ให้บริการ ฐานข้อมูล สิทธิ์เข้าฐาน (UsersScreen, ProvidersScreen, DatabasesScreen, DataAccessScreen, DataGroupsScreen, DatabaseInfoScreen))
1) จัดกลุ่มผู้ใช้ (UserGroupsScreen, :33-250)
หมายเหตุหัวจอ "สร้างกลุ่มผู้ใช้ และผูกผู้ใช้เข้ากลุ่ม" ทำงานกับตาราง sml_group_list (รหัสกลุ่ม/ชื่อกลุ่ม) และ sml_user_and_group (ผู้ใช้ต่อกลุ่ม) ผ่าน POST /api/admin/main-query
- จอแบ่ง 2 ส่วน: กลุ่มผู้ใช้ (N กลุ่ม) กับ สมาชิกในกลุ่ม <รหัสที่เลือก>
- เพิ่มกลุ่ม: ช่อง "รหัสกลุ่ม" (ตัวอย่าง SALE) และ "ชื่อกลุ่มผู้ใช้" แล้วกดปุ่ม เพิ่มกลุ่ม (
:89-105) ต้องกรอกทั้งคู่ ไม่งั้นขึ้น "กรุณากรอกรหัสกลุ่มและชื่อกลุ่ม" รหัสถูกแปลงเป็นตัวพิมพ์ใหญ่ (:90) สำเร็จแล้วขึ้นเพิ่มกลุ่ม "<รหัส> - <ชื่อ>" เรียบร้อย - คลิกแถวกลุ่มเพื่อเลือก แล้วติ๊ก/เอาติ๊กคอลัมน์ "สังกัด" ของผู้ใช้เพื่อเพิ่ม/ถอดสมาชิก (
toggleUserInGroup,:108-116) ใช้ INSERT/DELETE บนsml_user_and_groupทันทีโดยไม่มีปุ่มบันทึก - ปุ่มถังขยะ "ลบ" ที่แถวกลุ่ม (
:194-203) ลบสมาชิกของกลุ่มก่อน แล้วลบกลุ่ม (deleteGroup,:118-131) ไม่มีหน้าต่างยืนยัน และไม่ตรวจว่ากลุ่มนั้นถูกใช้ในตารางสิทธิ์อยู่หรือไม่
2) เปลี่ยนข้อความในระบบ (SystemTextScreen, :256-376)
หมายเหตุ "กำหนดป้ายกำกับและคำแปลภาษาไทย/อังกฤษของระบบ" ตารางต้นทางตามคอมเมนต์คือ sml_tooltip
- ฟอร์มด้านบน: รหัสข้อความ (Code) เช่น
word_customer, ข้อความภาษาไทย (Name 1) เช่น ลูกค้า / สมาชิก, ข้อความภาษาอังกฤษ (Name 2) เช่น Customer และปุ่ม บันทึกข้อความ (:319-331) - ตารางด้านล่าง "ตารางข้อความระบบ" แสดงรหัส / ไทย / อังกฤษ (
:341-343) โหลดจากGET /api/admin/menu-permissions?kind=tooltip&code=ALL&provider=..(:278-279) - บันทึกด้วย
PUT /api/admin/menu-permissionsส่ง{provider, kind: "tooltip", code, name_1, name_2}(:293-299) ถ้า Code หรือ Name 1 ว่างจะไม่ทำอะไรเงียบ ๆ (:291) สำเร็จขึ้น "บันทึกข้อความระบบเรียบร้อย" แล้วโหลดตารางใหม่ - ข้อความท้ายจอ: ถ้าไม่ได้ตั้ง จะใช้ค่าข้อความมาตรฐานของ SML Account (
:365) ที่เพิ่มได้คือคำเฉพาะกิจการ
3) กำหนดสิทธิ์กลุ่มใช้งาน และ 4) กำหนดการเข้าถึงข้อมูล (PermissionMatrixInner, :416-615)
สองจอใช้คอมโพเนนต์เดียวกัน ต่างกันที่ mode
- GroupPermissionScreen (
:379-389):mode="group"เลือก กลุ่มผู้ใช้ (จากsml_permissions_groupตามคอมเมนต์:377) หมายเหตุ "กำหนดสิทธิ์ อ่าน / เพิ่ม / แก้ไข / ลบ รายเมนูสำหรับแต่ละกลุ่ม" - DataPermissionScreen (
:391-400):mode="user"เลือก ผู้ใช้รายคน หมายเหตุ "กำหนดสิทธิ์การเข้าถึงเมนูและเอกสารรายบุคคล" - แถบเครื่องมือ: dropdown "กลุ่มผู้ใช้:" หรือ "ผู้ใช้:" (รหัส — ชื่อ), dropdown "หมวดเมนู:" (หมวดระดับบนของ
smlMenuเรียง 1..N) และปุ่ม บันทึกสิทธิ์ ซึ่งกดไม่ได้จนกว่าจะโหลดสิทธิ์ของเป้าหมายที่เลือกเสร็จ (disabled={busy || !selectedTarget || loadedTarget !== selectedTarget},:545) - ตารางแสดงทุกเมนูใบ (leaf) ของหมวดที่เลือก: รหัสเมนู, ชื่อเมนู และ 4 ช่องติ๊ก อ่าน / เพิ่ม / แก้ไข / ลบ (
RIGHT_COLUMNS,:405-410; รูปแบบตามคลาส C#_submenuListClassตามคอมเมนต์:403) - เมนูที่อยู่ใน
ADMIN_ONLY_MENU_SETแสดงป้าย "เฉพาะ Admin" และข้อความ "สงวนสิทธิ์เฉพาะผู้ดูแลระบบ (Admin เท่านั้น)" ติ๊กไม่ได้ (toggleออกทันทีถ้าisAdminOnlyMenu,:474; ป้ายที่:583-592) รายการนี้ตรงกับเมนูที่กล่าวใน กำหนดรายละเอียดบริษัท (CompanyProfileForm) และ กำหนดข้อเลือกพิเศษต่างๆ (OptionsForm) - โหลด
GET /api/admin/menu-permissions?kind=group|user&code=<เป้าหมาย>(:455-456) บันทึกPUT /api/admin/menu-permissionsส่ง{kind, code, menus: [ {code, read, add, edit, delete} ]}ของ ทุกหมวด ที่มีใน state ไม่ใช่เฉพาะหมวดที่เปิดอยู่ (:485-489) สำเร็จขึ้นบันทึกสิทธิ์ N เมนูของ <รหัส> เรียบร้อย(:493) - สิทธิ์เก็บเป็น ชื่อเมนู (
menu_*) ไม่ใช่รหัส 4 หลัก ดังนั้นการเปลี่ยนรหัสเมนูในsmlMenuไม่กระทบสิทธิ์ที่บันทึกไว้ (ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu)) คอมเมนต์ที่:574ระบุว่าเมนูบางรหัสปรากฏซ้ำสองที่ (เช่นmenu_income_listใต้ IC และตั้งค่าเงินสด/ธนาคาร) สิทธิ์ถูกเก็บตามรหัสเมนูเดียว - สิทธิ์ที่บันทึกไปถูกอ่านใช้ในจอ ERP ผ่าน
useScreenRights/rights.canEdit(ตัวอย่างใน กำหนดข้อเลือกพิเศษต่างๆ (OptionsForm) และ กำหนดรายละเอียดบริษัท (CompanyProfileForm)) กลไกอยู่ที่ พื้นที่ทำงานแบบแท็บ MDI และสิทธิ์จอ (TabWorkspace)
Popups ที่จอกลุ่มนี้เรียก
ไม่มี popup ใช้ข้อความแถบสีแดง/เขียวเหนือตาราง (err / done) เท่านั้น
ข้อควรระวัง
- การลบกลุ่มและการเพิ่ม/ถอดสมาชิกมีผลทันที ไม่มีปุ่มยกเลิก
- จอสิทธิ์โหลดเป้าหมายแรกเสมอเมื่อเปลี่ยน provider (
setSelectedTarget(list[0].code),:436,445) ถ้ายังไม่มีกลุ่มเลย dropdown จะว่างและปุ่มบันทึกกดไม่ได้ - การกด "บันทึกสิทธิ์" ส่งทั้ง state ที่ผู้ใช้เปิดดู: ถ้าสลับหมวดโดยไม่บันทึก การติ๊กของหมวดก่อนหน้ายังอยู่ใน state และถูกบันทึกไปด้วย
ที่มาในโค้ด
frontend/account/admin/screens/ExtraAdminScreens.tsx:33-250— กลุ่มผู้ใช้,:256-376ข้อความระบบ,:379-400สองจอสิทธิ์,:403-615เมทริกซ์สิทธิ์frontend/src/config/smlMenu.ts:277-280,356—ADMIN_ONLY_MENU_SET/isAdminOnlyMenu- ดูเพิ่ม: ศูนย์จัดการระบบ Admin: ผู้ใช้ ผู้ให้บริการ ฐานข้อมูล สิทธิ์เข้าฐาน (UsersScreen, ProvidersScreen, DatabasesScreen, DataAccessScreen, DataGroupsScreen, DatabaseInfoScreen) · สร้าง ตรวจสอบ และโอนข้อมูลฐานข้อมูล (CreateDatabaseScreen, CheckDatabaseScreen, TransferDataScreen) · ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu) · สารบัญหน้าจอทั้งหมดของ SML Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต)