Skip to content

User::hasPermission und ::getPermission verhalten sich falsch/komisch

tl;dr:

  • hasPermission und getPermission in der User-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:

  1. quiqqer/quiqqer ist in der neuesten dev-dev Version installiert
  2. Es gibt eine Boolean Permission meine.permission
  3. Es gibt eine Gruppe Händler
  4. Die Gruppe Händler hat die Permission meine.permission auf true
  5. Die Standard-Gruppe Everyone hat die Permission meine.permission auf false
  6. Es gibt einen Benutzer Jan
  7. Der Benutzer Jan hat die Permission meine.permission auf false
  8. Benutzer Jan ist Mitglied der Gruppen Händler und Everyone

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.

Was meint ihr dazu, @henbug @peat @mor ?

von Jan Wennrich bearbeitet