Το πακέτο αδειών Laravel της Spatie δεν υποστηρίζει εγγενώς την ιεραρχία των ρόλων ή την κληρονομιά από το κουτί. Αυτό σημαίνει ότι δεν διαθέτει ενσωματωμένη λειτουργικότητα για τον καθορισμό των σχέσεων γονέα-παιδιού μεταξύ των ρόλων όπου ένας γονικός ρόλος κληρονομεί αυτόματα όλα τα δικαιώματα των παιδικών ρόλων του.
Πώς η Spatie χειρίζεται τους ρόλους και τα δικαιώματα
- Οι ρόλοι και τα δικαιώματα αποθηκεύονται ως ξεχωριστές οντότητες στη βάση δεδομένων.
- Οι άδειες εκχωρούνται απευθείας στους ρόλους.
- Οι χρήστες έχουν τους ρόλους, και μέσω αυτών των ρόλων, κερδίζουν τα σχετικά δικαιώματα.
- Μπορείτε επίσης να εκχωρήσετε δικαιώματα απευθείας στους χρήστες.
- Κατά τον έλεγχο των δικαιωμάτων, το πακέτο εξετάζει όλα τα δικαιώματα που έχουν αντιστοιχιστεί απευθείας στον χρήστη και εκείνων που κληρονομούνται μέσω ρόλων.
ιεραρχία ρόλων και κληρονομιά
- Το πακέτο αντιμετωπίζει τους ρόλους ως επίπεδες οντότητες χωρίς καμία ιεραρχία.
- Δεν υπάρχει ενσωματωμένος μηχανισμός για την εκχώρηση ενός ρόλου σε άλλο ή για να έχει έναν "γονικό ρόλο" που κληρονομεί αυτόματα όλα τα δικαιώματα των "παιδικών ρόλων" [1] [4].
- Οι χρήστες μπορούν να έχουν πολλαπλούς ρόλους, γεγονός που επιτρέπει την ευελιξία στον συνδυασμό των δικαιωμάτων από διαφορετικούς ρόλους αντί να βασίζεται στην ιεραρχική κληρονομιά [2].
Κοινές προσεγγίσεις για την εφαρμογή ιεραρχίας ρόλων με Spatie
Δεδομένου ότι η Spatie δεν υποστηρίζει την κληρονομιά του ρόλου, οι προγραμματιστές συχνά εφαρμόζουν λύσεις όπως:
-Αναφορά όλων των δικαιωμάτων ρητά σε ρόλους υψηλότερου επιπέδου: Αντί να κληρονομούν δικαιώματα από τους ρόλους των παιδιών, αναθέτετε με το χέρι όλα τα σχετικά δικαιώματα σε κάθε ρόλο, συμπεριλαμβανομένων των ρόλων υψηλότερου επιπέδου όπως το "super-admin" που έχουν όλες τις άδειες χαμηλότερων ρόλων [2] [5].
- Κατάταξη ρόλων με ακέραιες τιμές: Μερικοί προγραμματιστές αναθέτουν μια κατάταξη ή επίπεδο σε ρόλους (π.χ., 1 για χρήστη, 2 για τον συντονιστή, 3 για το admin) και στη συνέχεια να εφαρμόσουν λογική στην αίτησή τους για να χορηγήσουν δικαιώματα βάσει της κατάταξης του ρόλου του χρήστη, προσομοιώνοντας αποτελεσματικά την ιεραρχία [2].
- Πολλαπλοί ρόλοι ανά χρήστη: Αντιστοίχιση πολλαπλών ρόλων σε χρήστες που χρειάζονται συνδυασμένα δικαιώματα από διαφορετικούς ρόλους, αποφεύγοντας την ανάγκη για ιεραρχικούς ρόλους [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-based-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-permissionsion
[9] https://stackoverflow.com/questions/78213905/hierarchical-roles-for-a-us-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