User::hasPermission und ::getPermission verhalten sich falsch/komisch
tl;dr:
-
hasPermission
undgetPermission
in derUser
-Klasse prüfen nicht die Permissions der Gruppen des Benutzers. -
checkPermission
prüft die Permission der Gruppen des Benutzers - Das Verhalten ist inkonsistent und verwirrend
Ausführliche Informationen:
Folgende Ausgangssituation:
-
quiqqer/quiqqer
ist in der neuestendev-dev
Version installiert - Es gibt eine Boolean Permission
meine.permission
- Es gibt eine Gruppe
Händler
- Die Gruppe
Händler
hat die Permissionmeine.permission
auftrue
- Die Standard-Gruppe
Everyone
hat die Permissionmeine.permission
auffalse
- Es gibt einen Benutzer
Jan
- Der Benutzer
Jan
hat die Permissionmeine.permission
auffalse
- Benutzer
Jan
ist Mitglied der GruppenHändler
undEveryone
Ich wollte nun herausfinden ob der Benutzer Jan
die Permission meine.permission
hat.
Dazu habe ich die folgenden Permission Methoden des Benutzers mit den dahinter stehenden Ergebnissen genutzt:
-
checkPermission('meine.permission')
->NULL
-
hasPermission('meine.permission')
->false
-
getPermission('meine.permission')
->false
Dass checkPermission
den Wert NULL
zurückgibt, kann ich noch einigermaßen verstehen, da eine Exception geworfen wird, wenn er die Permission nicht hat.
Dass hasPermission()
und getPermission()
beide false
zurückgeben finde ich allerdings seltsam.
Über die Gruppe Händler
sollte der Benutzer Jan
die Permission haben.
Wenn ich dem Benutzer die Permission direkt gebe, dann geben die beiden Methoden richtigerweise true
zurück.
Die beiden Methoden hasPermission
und getPermission
prüfen also nur ob der Benutzer direkt die Permission hat und nicht ob er die Permission über eine Gruppe hat.
Man könnte argumentieren, dass die Methoden auf dem Benutzer Objekt aufgerufen werden und daher auch nur den Benutzer überprüfen sollen.
Dann sollte sich aber auch checkPermission
konsistent verhalten und eine Permission-Exception werfen, wenn der Benutzer selbst die Permission nicht hat.
Am intuitivsten fände ich es, wenn alle drei Methoden auch die Permissions der Gruppen des Benutzers überprüfen würden.