Empfehlungen: Erweiterte Suche

ACL: Keine Zugriffsrechte über Gruppenzugehörigkeit

Daten auslesen, verarbeiten und den Views übergeben

ACL: Keine Zugriffsrechte über Gruppenzugehörigkeit

Beitragvon Esteba » Mi 13. Apr 2011, 22:36

Hallo allerseits,

Ich habe in ein Projekt eine Access Control List implementiert wie in diesem Tutorial beschrieben. Die Zugriffsrechte sind bei mir genau so simpel wie im Tutorial, es gibt eine Gruppe "Administratoren", die auf alles Zugriff hat (1 1 1 1 beim ACO "controllers") und eine Gruppe "User", die auf nichts Zugriff hat (-1 -1 -1 -1 bei "controllers") außer ausgewählte Controller und Actions. Leider funktioniert es nicht, wie es sollte: Auch als Administrator habe ich nur Zugriff auf die Actions, die alle User aufrufen können. In den Admin-Bereich komme ich nur, wenn ich für mich als User gesondert diese Rechte einstelle, aber das ist ja nicht Sinn der Sache. Die "parent_id" in der ARO-Tabelle stimmt eigentlich (1) und die "group_id" in der User-Tabelle auch. Wo kann da der Fehler liegen? Muss sonst noch irgendetwas gegeben sein, außer dass der User die richtige "group_id" hat und der ARO-Eintrag der Gruppe volle Rechte? Oder wo könnte ich eventuell etwas zerschossen haben, wenn ich an ACOs, AROs etc. öfter etwas geändert habe?

Ich sollte eigentlich Auszüge aus dem Code posten, aber er ist ja wie gesagt praktisch identisch mit dem aus dem Tutorial. Wird aber gerne nachgeliefert, wenn jemand eine Idee hat, wo es hapern könnte. ;)


Ich hätte auch noch eine zweite wichtige Frage: Ich möchte, dass User ihre eigenen Beiträge editieren können und nur die. Da reicht es ja nicht mehr die Zugriffsrechte nach Action zu setzen, man muss auch die Beitrags-ID überprüfen. Wie baue ich das am elegantesten ein? Kann die ACL-Komponente sowas schon oder muss ich wirklich eigenhändig die "user_id" des eingeloggten Benutzers mit der des Beitrags abgleichen?
Esteba
 
Beiträge: 6
Registriert: Do 14. Okt 2010, 08:20

Re: ACL: Keine Zugriffsrechte über Gruppenzugehörigkeit

Beitragvon enigmartin » Fr 15. Apr 2011, 19:47

Also ich hab ein ähnliches Problem bei mir festgestellt. Ich habe ebenfalls nur 3 Benutzergruppen: Administrator, Moderator, Benutzer. Ich habe meine Aktionen so optimiert das sie Einträge nur ansehen, anlegen und bearbeiten können.

Code: Alles auswählen
$group->id = 3; // Benutzer
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Artists/index');
$this->Acl->allow($group, 'controllers/Artists/add');
$this->Acl->allow($group, 'controllers/Artists/view');
$this->Acl->allow($group, 'controllers/Artists/edit');


Nun habe ich aber versucht als Benutzer einen Beitrag manual, also durch die Eingabe im Browser www.example.com/artists/delete/1 zu löschen, was einwandfrei funktionierte. Das sollte aber nicht so sein, weil ich anfangs den Zugriff zu allen Controller-Aktionen verweigere und dann spezifisch angeben wer was tun und lassen darf. Da werde ich aber versuchen das ganze manuell auch zu verbieten => $this->Acl->deny();.

Hast du denn immer wenn eine Aktion dazu kommt deine build_acl() und initDB() neu aufgerufen? Diese Methoden/Funktionen registrieren ja erst die Rechte in der Datenbank.

Das ein Benutzer nur seine Beiträge wieder bearbeiten kann darauf werde ich auch noch stoßen. Ich weiß nur noch nicht ganz wie ich das machen soll.
Benutzeravatar
enigmartin
 
Beiträge: 40
Registriert: So 27. Mär 2011, 10:42
CakePHP-Version: 1.3.8
OS: Windows 7

Re: ACL: Keine Zugriffsrechte über Gruppenzugehörigkeit

Beitragvon Esteba » Mo 18. Apr 2011, 19:05

Hi,

enigmartin hat geschrieben:Nun habe ich aber versucht als Benutzer einen Beitrag manual, also durch die Eingabe im Browser www.example.com/artists/delete/1 zu löschen, was einwandfrei funktionierte. Das sollte aber nicht so sein, weil ich anfangs den Zugriff zu allen Controller-Aktionen verweigere und dann spezifisch angeben wer was tun und lassen darf. Da werde ich aber versuchen das ganze manuell auch zu verbieten => $this->Acl->deny();.

Das ist natürlich auch ne Möglichkeit, nur eine etwas unbefriedigende... Weiß denn sonst keiner, wie das sein kann? Das Tutorial werden ja ziemlich viele durchgearbeitet haben, die sich mit ACL beschäftigen und offenbar hat das Problem ja keine tiefer verwurzelte Ursache, wenn wir jetzt schon zwei sind...

enigmartin hat geschrieben:Hast du denn immer wenn eine Aktion dazu kommt deine build_acl() und initDB() neu aufgerufen? Diese Methoden/Funktionen registrieren ja erst die Rechte in der Datenbank.

"build_acl" schon. Damit hatte ich übrigens auch schon so meine Probleme, weil er z.B. für die Funktion "changeProfile" ein ACO "change_profile" anlegt, aber ein "changeprofile" erwartet oder so. ^^ Solange ich nicht herausfinde, wie ich die Methode modifiziere, muss ich nach jedem Aufruf die überflüssigen ACOs wieder löschen...
Die ACO-ARO-Felder habe ich immer in phpMyAdmin von Hand hinzugefügt. Sollte ja eigentlich egal sein.

enigmartin hat geschrieben:Das ein Benutzer nur seine Beiträge wieder bearbeiten kann darauf werde ich auch noch stoßen. Ich weiß nur noch nicht ganz wie ich das machen soll.

Dazu hab ich einen interessanten Link gefunden: WhoDitIt-Behaviour
Könnte das vielleicht was sein? Habs bis jetzt nur überflogen. ^^
Esteba
 
Beiträge: 6
Registriert: Do 14. Okt 2010, 08:20


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 2 Gäste

cron