เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ
ACL (Access Control List) ใช้สำหรับควบคุมสิทธิ์การเข้าถึงและการดำเนินการกับทรัพยากรต่างๆ ครับ/ค่ะ คุณสามารถกำหนดสิทธิ์ให้กับบทบาท (Role) หรือจะข้ามข้อจำกัดของบทบาทไปกำหนดสิทธิ์โดยตรงก็ได้ครับ/ค่ะ ระบบ ACL มีกลไกการจัดการสิทธิ์ที่ยืดหยุ่น รองรับวิธีการที่หลากหลาย เช่น การใช้ Permission Snippet, Middleware, การตรวจสอบเงื่อนไข และอื่นๆ ครับ/ค่ะ
ออบเจกต์ ACL จะเป็นส่วนหนึ่งของแหล่งข้อมูล (dataSource.acl) ครับ/ค่ะ สำหรับ ACL ของแหล่งข้อมูลหลัก สามารถเข้าถึงได้อย่างรวดเร็วผ่าน app.acl ครับ/ค่ะ ส่วนการใช้งาน ACL ของแหล่งข้อมูลอื่นๆ สามารถดูรายละเอียดเพิ่มเติมได้ในบท การจัดการแหล่งข้อมูล ครับ/ค่ะ
Permission Snippet ช่วยให้คุณสามารถลงทะเบียนชุดสิทธิ์ที่ใช้งานบ่อยๆ ให้เป็นหน่วยสิทธิ์ที่นำกลับมาใช้ซ้ำได้ครับ/ค่ะ เมื่อบทบาทถูกผูกกับ Snippet ก็จะได้รับชุดสิทธิ์ที่เกี่ยวข้อง ซึ่งช่วยลดการตั้งค่าซ้ำซ้อนและเพิ่มประสิทธิภาพในการจัดการสิทธิ์ครับ/ค่ะ
acl.allow() ใช้เพื่ออนุญาตให้การดำเนินการบางอย่างสามารถข้ามข้อจำกัดของบทบาทได้ เหมาะสำหรับ API สาธารณะ, สถานการณ์ที่ต้องการการตรวจสอบสิทธิ์แบบไดนามิก หรือกรณีที่ต้องตัดสินสิทธิ์โดยอิงจาก Context ของคำขอครับ/ค่ะ
คำอธิบายพารามิเตอร์ condition:
'public': ผู้ใช้ทุกคน (รวมถึงผู้ที่ยังไม่ได้ล็อกอิน) สามารถเข้าถึงได้ โดยไม่จำเป็นต้องมีการยืนยันตัวตนใดๆ ครับ/ค่ะ'loggedIn': เฉพาะผู้ใช้ที่ล็อกอินแล้วเท่านั้นที่สามารถเข้าถึงได้ โดยต้องมีข้อมูลผู้ใช้ที่ถูกต้องครับ/ค่ะ(ctx) => Promise<boolean> หรือ (ctx) => boolean: ฟังก์ชันที่กำหนดเอง ซึ่งจะตรวจสอบแบบไดนามิกจาก Context ของคำขอว่าอนุญาตให้เข้าถึงหรือไม่ และสามารถนำไปใช้กับ Logic สิทธิ์ที่ซับซ้อนได้ครับ/ค่ะacl.use() ใช้สำหรับลงทะเบียน Middleware สิทธิ์ที่กำหนดเอง ซึ่งสามารถแทรก Logic ที่กำหนดเองเข้าไปในขั้นตอนการตรวจสอบสิทธิ์ได้ครับ/ค่ะ โดยทั่วไปจะใช้ร่วมกับ ctx.permission เพื่อกำหนดกฎสิทธิ์ที่กำหนดเองครับ/ค่ะ เหมาะสำหรับสถานการณ์ที่ต้องการการควบคุมสิทธิ์ที่ไม่ใช่แบบปกติ เช่น ฟอร์มสาธารณะที่ต้องมีการยืนยันรหัสผ่านที่กำหนดเอง, การตรวจสอบสิทธิ์แบบไดนามิกโดยอิงจากพารามิเตอร์ของคำขอ เป็นต้นครับ/ค่ะ
สถานการณ์การใช้งานทั่วไป:
การควบคุมสิทธิ์ผ่าน ctx.permission:
คำอธิบายคุณสมบัติ ctx.permission:
skip: true: ข้ามการตรวจสอบสิทธิ์ ACL ที่เหลือ และอนุญาตให้เข้าถึงได้ทันทีaddFixedParams สามารถเพิ่มข้อจำกัดขอบเขตข้อมูล (filter) แบบตายตัวให้กับการดำเนินการของทรัพยากรบางอย่างได้ ข้อจำกัดเหล่านี้จะข้ามข้อจำกัดของบทบาทและถูกนำไปใช้โดยตรง ซึ่งมักใช้เพื่อปกป้องข้อมูลสำคัญของระบบครับ/ค่ะ
เคล็ดลับ:
addFixedParamsสามารถใช้เพื่อป้องกันข้อมูลที่ละเอียดอ่อนถูกลบหรือแก้ไขโดยไม่ตั้งใจ เช่น บทบาทที่มาพร้อมกับระบบ, บัญชีผู้ดูแลระบบ เป็นต้นครับ/ค่ะ ข้อจำกัดเหล่านี้จะทำงานร่วมกับสิทธิ์ของบทบาท เพื่อให้แน่ใจว่าแม้จะมีสิทธิ์ก็ไม่สามารถดำเนินการกับข้อมูลที่ได้รับการปกป้องได้ครับ/ค่ะ
acl.can() ใช้สำหรับตรวจสอบว่าบทบาทใดมีสิทธิ์ดำเนินการตามที่ระบุหรือไม่ โดยจะคืนค่าเป็นออบเจกต์ผลลัพธ์ของสิทธิ์ หรือ null ครับ/ค่ะ มักใช้ในการตรวจสอบสิทธิ์แบบไดนามิกใน Logic ทางธุรกิจ เช่น การตัดสินใจว่าจะอนุญาตให้ดำเนินการบางอย่างหรือไม่ โดยอิงจากบทบาทใน Middleware หรือ Handler ของการดำเนินการนั้นๆ ครับ/ค่ะ
เคล็ดลับ: หากมีการส่งบทบาทหลายบทบาท ระบบจะตรวจสอบแต่ละบทบาทตามลำดับ และจะคืนค่าผลลัพธ์ที่เป็นการรวมกันของสิทธิ์จากบทบาทเหล่านั้นครับ/ค่ะ
คำจำกัดความประเภท (Type Definitions):
หากคุณต้องการให้การดำเนินการที่กำหนดเองสามารถกำหนดค่าสิทธิ์ได้บนหน้า UI (เช่น แสดงในหน้าจัดการบทบาท) คุณจะต้องใช้ setAvailableAction เพื่อลงทะเบียนครับ/ค่ะ การดำเนินการที่ลงทะเบียนแล้วจะปรากฏในหน้าการกำหนดค่าสิทธิ์ ซึ่งผู้ดูแลระบบสามารถกำหนดสิทธิ์การดำเนินการสำหรับบทบาทต่างๆ ได้บนหน้า UI ครับ/ค่ะ
คำอธิบายพารามิเตอร์:
{{t("key")}})'new-data': การดำเนินการที่สร้างข้อมูลใหม่ (เช่น การนำเข้า, การเพิ่มข้อมูลใหม่ เป็นต้น)'existing-data': การดำเนินการที่แก้ไขข้อมูลที่มีอยู่ (เช่น การอัปเดต, การลบ เป็นต้น)'new-data' เท่านั้นหลังจากลงทะเบียนแล้ว การดำเนินการนี้จะปรากฏในหน้าการกำหนดค่าสิทธิ์ ซึ่งผู้ดูแลระบบสามารถกำหนดสิทธิ์ของการดำเนินการนี้ได้ในหน้าจัดการบทบาทครับ/ค่ะ