Paket izin Laravel Spatie tidak secara native mendukung hierarki peran atau warisan di luar kotak. Ini berarti tidak memiliki fungsionalitas bawaan untuk mendefinisikan hubungan orang tua-anak di antara peran di mana peran orang tua secara otomatis mewarisi semua izin dari peran anaknya.
Bagaimana Spatie Menangani Peran dan Izin
- Peran dan izin disimpan sebagai entitas terpisah dalam database.
- Izin ditugaskan langsung ke peran.
- Pengguna ditugaskan peran, dan melalui peran itu, mereka mendapatkan izin terkait.
- Anda juga dapat menetapkan izin langsung ke pengguna.
- Saat memeriksa izin, paket melihat semua izin yang ditetapkan langsung ke pengguna ditambah yang diwariskan melalui peran.
Hirarki dan warisan peran
- Paket memperlakukan peran sebagai entitas flat tanpa hierarki.
- Tidak ada mekanisme bawaan untuk menetapkan satu peran ke yang lain atau memiliki "peran orang tua" yang secara otomatis mewarisi semua izin "peran anak" [1] [4].
- Pengguna dapat memiliki banyak peran yang ditetapkan, yang memungkinkan fleksibilitas dalam menggabungkan izin dari berbagai peran daripada mengandalkan pewarisan hierarkis [2].
pendekatan umum untuk mengimplementasikan hierarki peran dengan spatie
Karena Spatie tidak mendukung warisan peran, pengembang sering menerapkan solusi seperti:
-Menetapkan semua izin secara eksplisit untuk peran tingkat yang lebih tinggi: alih-alih mewarisi izin dari peran anak, Anda secara manual menetapkan semua izin yang relevan untuk setiap peran, termasuk peran tingkat yang lebih tinggi seperti "super-admin" yang memiliki semua izin peran yang lebih rendah [2] [5].
- Peringkat peringkat dengan nilai integer: Beberapa pengembang menetapkan peringkat atau level untuk peran (mis., 1 untuk pengguna, 2 untuk moderator, 3 untuk admin) dan kemudian mengimplementasikan logika dalam aplikasi mereka untuk memberikan izin berdasarkan peringkat peran pengguna, secara efektif mensimulasikan hierarki [2].
- Ganda Peran per Pengguna: Tetapkan peran ganda untuk pengguna yang membutuhkan izin gabungan dari peran yang berbeda, menghindari kebutuhan akan peran hierarkis [2].
Ringkasan
- Paket Spatie berfokus pada pengelolaan peran dan izin sebagai entitas flat yang terpisah.
-Ini mendorong penetapan izin langsung ke peran dan pengguna tanpa warisan peran-ke-peran.
- Hirarki dan warisan peran harus diimplementasikan secara manual jika diperlukan, biasanya dengan menetapkan izin secara eksplisit atau menggunakan logika peringkat khusus.
- Desain ini menghindari masalah potensial di mana izin peran orang tua bergantung pada peran anak, yang dapat menyebabkan kompleksitas keamanan atau manajemen [1] [2] [4].
Dengan demikian, sementara Spatie menyediakan sistem izin yang kuat dan fleksibel, ia tidak menangani hierarki dan warisan peran secara internal; Pengembang harus merancang strategi mereka sendiri untuk mensimulasikan perilaku tersebut jika diperlukan.
Kutipan:
[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-berbasis-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-diferent-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