Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Spatie จัดการกับลำดับชั้นของบทบาทและมรดกได้อย่างไร


Spatie จัดการกับลำดับชั้นของบทบาทและมรดกได้อย่างไร


แพ็คเกจการอนุญาต Laravel ของ Spatie ไม่สนับสนุนลำดับชั้นของบทบาทหรือการสืบทอดนอกกรอบ ซึ่งหมายความว่ามันไม่มีฟังก์ชั่นในตัวสำหรับการกำหนดความสัมพันธ์ระหว่างพ่อแม่ลูกระหว่างบทบาทที่บทบาทหลักจะสืบทอดการอนุญาตทั้งหมดของบทบาทเด็กทั้งหมด

Spatie จัดการกับบทบาทและการอนุญาตอย่างไร

- บทบาทและการอนุญาตถูกเก็บไว้เป็นเอนทิตีแยกต่างหากในฐานข้อมูล
- การอนุญาตถูกกำหนดโดยตรงกับบทบาท
- ผู้ใช้ได้รับการกำหนดบทบาทและผ่านบทบาทเหล่านั้นพวกเขาได้รับสิทธิ์ที่เกี่ยวข้อง
- คุณสามารถกำหนดสิทธิ์ให้กับผู้ใช้โดยตรง
- เมื่อตรวจสอบสิทธิ์แพ็คเกจจะดูสิทธิ์ทั้งหมดที่กำหนดให้กับผู้ใช้โดยตรงรวมถึงที่สืบทอดผ่านบทบาท

ลำดับชั้นของบทบาทและมรดก

- แพ็คเกจถือว่าบทบาทเป็นเอนทิตีแบบแบนโดยไม่มีลำดับชั้นใด ๆ
- ไม่มีกลไกในตัวเพื่อกำหนดบทบาทหนึ่งให้กับอีกบทบาทหนึ่งหรือมี "บทบาทหลัก" ที่สืบทอดการอนุญาตทั้งหมดของ "บทบาทเด็ก" โดยอัตโนมัติ [1] [4]
- ผู้ใช้สามารถมีหลายบทบาทที่ได้รับมอบหมายซึ่งช่วยให้มีความยืดหยุ่นในการรวมสิทธิ์จากบทบาทที่แตกต่างกันแทนที่จะอาศัยการสืบทอดลำดับชั้น [2]

วิธีการทั่วไปในการใช้ลำดับชั้นบทบาทกับ Spatie

เนื่องจาก Spatie ไม่สนับสนุนการสืบทอดบทบาทนักพัฒนาจึงใช้วิธีแก้ปัญหาเช่น:

-การกำหนดสิทธิ์ทั้งหมดอย่างชัดเจนให้กับบทบาทระดับสูงกว่า: แทนที่จะสืบทอดการอนุญาตจากบทบาทของเด็กคุณกำหนดสิทธิ์ที่เกี่ยวข้องทั้งหมดให้กับแต่ละบทบาทรวมถึงบทบาทระดับสูงเช่น

- การจัดอันดับบทบาทที่มีค่าจำนวนเต็ม: นักพัฒนาบางคนกำหนดระดับหรือระดับให้กับบทบาท (เช่น 1 สำหรับผู้ใช้ 2 สำหรับผู้ดูแล, 3 สำหรับผู้ดูแลระบบ) จากนั้นใช้ตรรกะในแอปพลิเคชันของพวกเขาเพื่อให้สิทธิ์ตามบทบาทของผู้ใช้

- หลายบทบาทต่อผู้ใช้: กำหนดหลายบทบาทให้กับผู้ใช้ที่ต้องการสิทธิ์รวมจากบทบาทที่แตกต่างกันหลีกเลี่ยงความจำเป็นในการมีบทบาทแบบลำดับชั้น [2]

สรุป

- แพ็คเกจของ Spatie มุ่งเน้นไปที่การจัดการบทบาทและการอนุญาตเป็นหน่วยงานที่แยกจากกัน
-สนับสนุนการกำหนดสิทธิ์โดยตรงกับบทบาทและผู้ใช้โดยไม่มีการสืบทอดบทบาทต่อบทบาท
- ลำดับชั้นของบทบาทและการสืบทอดจะต้องดำเนินการด้วยตนเองหากจำเป็นโดยทั่วไปโดยการกำหนดสิทธิ์อย่างชัดเจนหรือใช้ตรรกะการจัดอันดับที่กำหนดเอง
- การออกแบบนี้หลีกเลี่ยงปัญหาที่อาจเกิดขึ้นซึ่งการอนุญาตของบทบาทผู้ปกครองขึ้นอยู่กับบทบาทของเด็กซึ่งอาจทำให้เกิดความปลอดภัยหรือความซับซ้อนในการจัดการ [1] [2] [4]

ดังนั้นในขณะที่ spatie ให้ระบบการอนุญาตที่แข็งแกร่งและยืดหยุ่น แต่ก็ไม่ได้จัดการกับลำดับชั้นของบทบาทและการสืบทอดภายใน นักพัฒนาต้องออกแบบกลยุทธ์ของตนเองเพื่อจำลองพฤติกรรมดังกล่าวหากจำเป็น

การอ้างอิง:
[1] https://github.com/spatie/laravel-permission/issues/685
[2] https://www.reddit.com/r/laravel/comments/jrhkc9/struggling_to_create_hierarchy_of_permissions_in/
[3] https://spatie.be/docs/laravel-permission/v6/introduction
[4] https://stackoverflow.com/questions/67520321/how-to-implement-hierarchical-rbac-in-laravel
[5] https://www.interserver.net/tips/kb/how-to-implement-role-access-control-in-laravel/
[6] https://www.reddit.com/r/laravel/comments/1e78vct/strategy_for_permission_and_authorisation_design/
[7] https://www.youtube.com/watch?v=3HSBJCVWH78
[8] https://spatie.be/docs/laravel-permission/v6/basic-usage/role-permissions
[9] https://stackoverflow.com/questions/78213905/hierarchical-roles-for-a-user-with-child-roles-having-different-permissions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with-roles-doesnt-assignrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policies-and-gates-handling-role-access-1bdn