ความแตกต่างระหว่าง `haspermissionto` และ` hasanypermission 'ในบริบทของแพ็คเกจการอนุญาต Spatie laravel อยู่ในวิธีที่พวกเขาตรวจสอบการอนุญาตผู้ใช้:
- Haspermission เพื่อตรวจสอบว่าผู้ใช้มีสิทธิ์เพียงครั้งเดียวหรือไม่ มันส่งคืน `true` หากผู้ใช้มีสิทธิ์ที่แน่นอนนั้นไม่ว่าจะได้รับมอบหมายโดยตรงหรือสืบทอดผ่านบทบาทและ` เท็จ 'มิฉะนั้น คุณสามารถผ่านชื่อสิทธิ์ ID หรือวัตถุที่ได้รับอนุญาตไปยังวิธีนี้ มันมีประโยชน์เมื่อคุณต้องการตรวจสอบสิทธิ์หนึ่งโดยเฉพาะสำหรับผู้ใช้
- hasanypermission เพื่อตรวจสอบว่าผู้ใช้มี * ใด ๆ * หนึ่งในหลาย ๆ สิทธิ์ที่ผ่านเป็นอาร์เรย์หรือรายการ มันจะส่งคืน `true` หากผู้ใช้มีสิทธิ์ที่ระบุอย่างน้อยหนึ่งรายการและ 'เท็จ' หากไม่มีการกำหนด วิธีนี้สะดวกเมื่อคุณต้องการอนุญาตให้เข้าถึงหากผู้ใช้มีสิทธิ์อย่างน้อยหนึ่งรายการจากชุดสิทธิ์ที่เป็นไปได้
หมายเหตุสำคัญเพิ่มเติม:
- ทั้งสองวิธีตรวจสอบสิทธิ์ที่ได้รับมอบหมายโดยตรงให้กับผู้ใช้เช่นเดียวกับที่สืบทอดมาจากบทบาท
- วิธีการเหล่านี้ไม่ได้พิจารณาประตูของ Laravel `ก่อนการเรียกกลับหรือฟังก์ชั่นบายพาส Super-Admin ด้วยเหตุนี้คุณควรใช้วิธี `can`,` canany` หรือ `canall` เมธอดแทนซึ่งรวมเข้ากับประตูและนโยบายและสนับสนุนตรรกะที่ยอดเยี่ยม
- `haspermissionto` ใช้สำหรับการตรวจสอบการอนุญาตเพียงครั้งเดียวในขณะที่ `hasanypermissionto 'สำหรับการตรวจสอบหลาย ๆ สิทธิ์ที่พอเพียงใด
โดยสรุปให้ใช้ `haspermissionto` เมื่อตรวจสอบการอนุญาตเพียงครั้งเดียวและใช้` hasanypermissionto 'เมื่อคุณต้องการตรวจสอบว่าผู้ใช้มีสิทธิ์อย่างน้อยหนึ่งรายการจากรายการ สำหรับสถานการณ์การอนุญาตที่ซับซ้อนมากขึ้นหรือมากกว่านั้นให้เลือกวิธี `Can` ในตัวของ Laravel แทน [1] [2] [5]
การอ้างอิง:
[1] https://spatie.be/docs/laravel-permission/v6/basic-usage/direct-permissions
[2] https://stackoverflow.com/questions/58093970/spatie-laravel-permissions-gate-and-haspermissionto-not-working
[3] https://github.com/spatie/laravel-permission/issues/79
[4] https://discuss.flarum.org/d/4817-difference-between-user-an-and-user-haspermission
[5] https://spatie.be/docs/laravel-permission/v6/basic-usage/role-permissions
[6] https://dev.to/nicolasmontielf/add-permissions-androles-to your-laravel-project-2hhl
[7] https://www.reddit.com/r/laravel/comments/1e78vct/strategy_for_permission_and_authorisation_design/
[8] https://www.honeybadger.io/blog/laravel-permissions-roles/