Implementierung eines Rechtesystems mit dem APF

Im Entwickler-Forum können Implementierungsdetails sowie Alternativen der Umsetzung diskutiert werden. // Here, developers can discuss implementation details of features of their projects.
Antworten
apffan200
Beiträge: 41
Registriert: 15.09.2013, 20:22:40

Implementierung eines Rechtesystems mit dem APF

Beitrag von apffan200 » 04.12.2013, 08:44:02

Hi Leute,

Das ist jetzt eher ne Designfrage statt ber Frage zum APF. Wenn es nicht hierher gehört, dann bitte verschieben.

Es geht um die Implementierung eines Rechtesystems. Es besitzt Rollen, due wiederum Rechte (Permissions) enthält. Diese Permissions sind blos die Information. Meine Idee war, dass jedes Template via Doccon eine ID gestlegt, die in der DB gespeichert wird und dann ein Recht zugeteilt bekommt. Der Doccon implementiert dann ein Imterface, dass die Methoden dafür vorschreibt. Dann kann eine Taglib den Doccon und damit das benötogte Rechte aufruft und mit den Infos aus der DB abgleicht. Das ist eigtl. ganz gut, aber wenn ich CMS generierte Seiten ebenfalls mit einbezogen werden sollen, dann müsste ich nen Doccon schreiben, der 'nur' den Identifier aus der DB holt und speichert.
Ist das dann aber nicht überflüssiger Code?
Gibt es für die Problematik sauberere Lösungen?

Lg Maximilian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von dr.e. » 04.12.2013, 12:02:54

Hi,

hast du dir mal das Modul Benutzer-Verwaltung angesehen? Dieses bietet dir schon eine ganze Menge an Features zur Verwaltung der Berechtigungen.

Der Rest kommt ehrlich gesagt auf die Anforderungen an und ich muss gestehen, dass ich deinen Implementierungsansatz verstanden habe, jedoch nicht die eigentlichen Anforderungen.
Viele Grüße,
Christian

apffan200
Beiträge: 41
Registriert: 15.09.2013, 20:22:40

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von apffan200 » 04.12.2013, 16:51:35

Hallo Christian,

ja, das Umgt Modul hab ich mir angesehen.
Es gibt zwar ein paar Ounkte, die gegen die Verwendung des Moduls sprechen, das Hauptgegenaegument ist aber, dass man in der Importtaglib als Attribut die benötigte Rolle angeben muss. Ich möchte aber die Rollen via DB konfigurierbar lassen, was v.a. sich bei CMS generierten Seiten wichtig ist. Ein zweiter Punkt dür diese Implementierung ist, dass ich die benötigten Rechtenfür das ansehen von Menüpunkten nur im Menücontroller mit den Rechten des Benutzers abchecken kann.

Lg Maximilian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von dr.e. » 04.12.2013, 22:52:18

Hallo Maximilian,

ich möchte dich keineswegs zur Nutzung des Moduls drängen, mir ging es nur darum, dir ein paar Ideen zu geben. Das UMGT-Modul liefert beispielsweise einen Tag mit, der an Hand der Gruppe eines Benutzers Inhalte anzeigt oder nicht. Dies passiert in einem Tag, kann jedoch genauso in einem Controller passieren. Das Prinzip ist das gleiche: du brauchst eine Datenbank zur Verwaltung der Benutzer, Gruppen und Berechtigungen und eine Möglichkeit, den Benutzer in der Session zu speichern und bei Bedarf (z.B. zur Evaluierung der Berechtigungen) auszulesen.

Insbesondere
Ein zweiter Punkt dür diese Implementierung ist, dass ich die benötigten Rechtenfür das ansehen von Menüpunkten nur im Menücontroller mit den Rechten des Benutzers abchecken kann.
könntest du ebenso in einem Tag abdecken - z.B. sofern die Darstellung des Menüs in einem Tag abgefasst ist. Genauso gut kannst du das natürlich in einem Controller abdecken. Das APF bietet dir hier viele Möglichkeiten.
[..] Hauptgegenaegument ist aber, dass man in der Importtaglib als Attribut die benötigte Rolle angeben muss. Ich möchte aber die Rollen via DB konfigurierbar lassen, was v.a. sich bei CMS generierten Seiten wichtig ist.
Auch das ist via Tag möglich, denn auch dort kommst du an die entsprechenden Daten und kannst ggf. eine Datenbank abfragen.

Da ich - das mag sicher an mir liegen - die eigentlichen Anforderungen noch nicht umrissen habe, tue ich mir ehrlich gesagt schwer dir eine Lösung vorzuschlagen. Soweit ich verstanden habe, möchtest du ein CMS bauen, das Seiten an Hand von Berechtigungen von Benutzern ausspielt oder nicht. Ist das korrekt? Falls ja, welche weiteren Anforderungen hast du noch?
Viele Grüße,
Christian

apffan200
Beiträge: 41
Registriert: 15.09.2013, 20:22:40

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von apffan200 » 04.12.2013, 23:13:30

Guten Abend Christian,

danke für deine Antwort.
Ich eollte in erster Linie alles konfigurierbar via DB halten und ja, ich arbeite privat an einem CMS. In erster Linie ging es mit darum, dass bestimmte Widgets nur für bestimmte Rollen sichtbar sind. Außerdem wollte ich einen Contentbereich, wo ein Blogeintrag oder ein Teil des Backends sichtbar ist. Dafür brauche ich logischerweise verschiedene Rollen. Jetzt ist die Frage, wie ich diese aus der DB holen könnte, ich hatte die Idee eine ActIonID jeder Seite zuzuweisen, aber ich bin mir nicht so sicher, wo die Zuweisung stattfinden soll, ein Doccon wäre in Meinen Augen dafür ein wenig übertrieben, oder?

Ist soweit dann alles klar?

Lg Maximilian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von dr.e. » 05.12.2013, 10:28:16

Hallo Maximilian,

langsam verstehe ich, wo du hin möchtest. :)
Jetzt ist die Frage, wie ich diese aus der DB holen könnte [..]
Inhalte aus der Datenbank kannst du von überall her holen. Insofern ist das IMHO kein relevantes Entscheidungskriterium.
[..], ich hatte die Idee eine ActIonID jeder Seite zuzuweisen, aber ich bin mir nicht so sicher, wo die Zuweisung stattfinden soll [..]
So wie ich deine Beschreibung verstehe, möchtest du eher einem Bereich ("Widget") Rollen zuordnen und nicht der kompletten Seite. Dies ist meiner Meinung nach auch der geschicktere Ansatz, sonst musst du als Redakteur sehr viele Seiten-Derivate anlegen statt auf der Seite einfach nur definieren zu können, was für wen angezeigt wird.
Insofern schlage ich ein Attribut am konkreten Bereich bzw. dem konkretz eingebundenen Modul vor.
[..], ein Doccon wäre in Meinen Augen dafür ein wenig übertrieben, oder?
Ich würde die Evaluierung, ob etwas angezeigt wird oder nicht abstrahieren. Hierzu kannst du z.B. einen eigenen Tag schreiben, der das kapselt oder auch einen abstrakten Document-Controller. Die Zuweisung - sprich die Konfiguration - sollte im Admin-Bereich des CMS stattfinden. Die Abfrage kann dann wie eingangs erwähnt im Controller des Moduls stattfinden.
Viele Grüße,
Christian

apffan200
Beiträge: 41
Registriert: 15.09.2013, 20:22:40

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von apffan200 » 05.12.2013, 14:32:09

Hallo Christian,

die Konfiguration, also Action ID gehört, wie ich es vorgeschlagen, in den Controller, korrekt?
Der Rest kommt dann in die Tags.

Lg Maximilian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von dr.e. » 05.12.2013, 19:14:32

So könntest du das Umsetzen - korrekt. Sofern die Action-ID statisch ist, könntest du das auch als Tag-Attribute definieren.
Viele Grüße,
Christian

apffan200
Beiträge: 41
Registriert: 15.09.2013, 20:22:40

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von apffan200 » 08.01.2014, 22:39:15

Hallo Christian,

da ich vieles zu tun hatte, lief die Implementierung leider nur schleppend voran :(
Jetzt habe ich eine erste funktionierende Version, aber so richtig gefallen tut es mir nicht. Die ActionID soll ja dynamisch verteilbar sein, weshalb der Setter theoretisch die ID aus der DB sollte. Jetzt führt aber kein Weg drumherum, wenn ich die Konfiguration in den Doccon auslege, mehrere Instanzen zu erstellen. Wenn die ID aber z.B. erst in der transformContent() verändert werden soll, müsste ich die Methode - und damit die Business Regeln und Datenbankabfragen - mehrmals aufrufen, da die Instanz des Doccons keine Klassenvariable ist. Jetzt fällt mir aber leider nicht ein, wie ich diese Problematik umgehen könnte und bräuchte da noch mal deine Hilfe,

LG Maximilian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von dr.e. » 09.01.2014, 15:49:45

Hallo Maximilian,

kannst du mal ein bischen Quellcode posten?
Jetzt fällt mir aber leider nicht ein, wie ich diese Problematik umgehen könnte und bräuchte da noch mal deine Hilfe,
Pauschal könnte ich mir eine Lösung über einen Tag vorstellen (siehe oben).
Viele Grüße,
Christian

apffan200
Beiträge: 41
Registriert: 15.09.2013, 20:22:40

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von apffan200 » 09.01.2014, 17:36:03

Hallo Christian,

das ganze habe ich bereits via Tag gelöst:
hier mal die etwas vereinfachte transform() Methode.

Code: Alles auswählen

public function transform() {
   $aM = $this->getACLManager();   // ACL Manager
   $repository = $aM->getRepository();
   $actionID = (new $this->docCon())->getActionID();

   // check permission of user
} 
Das aktuelle Problem ist nun, dass ich nur via Fluent Interface auf die ID zugreifen kann. Die Instanz des Controllers ist ja schließlich keine Klassenvariable. Wenn ich nun in der transformContent() oder so die Variable verändern will, muss diese Methode zweimal ausgeführt werden, was zu einem Performanceverlust führt.
Lange Rede kurzer Sinn: ich würde gerne die Variable veränderbar halten (via transformContent oder externes Aufrufen des Setters), aber ich kann auf den Controller im Tag nicht zugreifen. Daher müsste ich den Code mehrmals ausführen und könnte extern die ID überhaupt nicht verändern. Bei der Umsetzung dieses Problems stehe ich gerade auf dem Schlauch und könnte etwas Hilfe gebrauchen

LG Maximilian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von dr.e. » 10.01.2014, 00:27:06

Warum brauchst du denn die Information 2x? Reicht es nicht, diese im Tag zu halten und ggf. im Controller einfach nochmal darauf zuzugreifen?
Viele Grüße,
Christian

apffan200
Beiträge: 41
Registriert: 15.09.2013, 20:22:40

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von apffan200 » 12.01.2014, 13:40:11

Ja, je mehr ich darüber nachdenke, desto sinnfreier kommt es mir vor,das ganze via Controller zu lösen.

Jetzt sehe ich aber kaum noch Vorteile dem Umgt gegenüber und werde es wahrscheinlich auch benutzen und die Pres Komponenten und die Sprachdateien überschreiben. Trotzdem hätte ich eine Frage noch: kann ich Benutzer nur sperren oder müsste ich das in einem CustomUmgtManager lösen, der von dem eigentlichem Manager erbt?

LG Maximilian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Implementierung eines Rechtesystems mit dem APF

Beitrag von dr.e. » 12.01.2014, 20:46:21

Hallo Maximilian,
Ja, je mehr ich darüber nachdenke, desto sinnfreier kommt es mir vor,das ganze via Controller zu lösen.
Alles klar. Schön, dass du für dich zu einer Lösung/Entscheidung gekommen bist.
Trotzdem hätte ich eine Frage noch: kann ich Benutzer nur sperren oder müsste ich das in einem CustomUmgtManager lösen, der von dem eigentlichem Manager erbt?
Aktuell ist das im UMGT (noch) nicht möglich. Es gibt jedoch einen Feature-Request unter http://tracker.adventure-php-framework. ... .php?id=37, der diese Funktionalität beschreibt. Vielleicht kannst du das UMGT zunächst so nutzen und sobald das Feature umgesetzt wurde dieses nutzen. Alternativ ist auch immer ein Code-Beitrag willkommen, sprich ein Anwender (in diesem Fall du) setzt das Feature um, und reicht den Code ein.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast