Wie würdet ihr die Controller Actions für einen Admin Bereich strukturieren (MVC)

  • Hallo,
    es gibt ja prinzipiell zwei Möglichkeiten:

    Alle Admin Actions im Admin Controller unterbringen oder im jeweiligen Controller (z.B. User) die Admin Actions einbauen und ggf. per Routing die URLs nach belieben ändern.

    Was haltet ihr für "schöner"?

    Danke!

  • Hängt etwas von den Funktionen ab. Einen Admin-Controller wirst du sowieso brauchen, da du bestimmt auch Administrations-Spezifische Actions haben wirst. Ich würde einfach in erster Linie darauf achten, dass dein Code DRY bleibt. Wenn du also im Adminbereich genau die gleiche Funktionalität für eine Action haben musst, wie im User-Controller, dann verwende die. Du kannst sie ja auch per Subrequest im Admincontroller verwenden.

    Meist werden wohl die Adminfunktionen nicht gleich aufgebaut sein, wie beim User. Dann würde ich die ganze Action im Admincontroller schreiben. Für das Speichern der Daten kannst du ja trotzdem das User-Model verwenden.

  • Hi,

    ich habe generell die Möglichkeit eines virtuellen Logins für den Admin eingebaut, der dann auch direkt auf das Userinterface zugreifen kann. Aber ein Admin benötigt natürlich auch Statistiken und muss administrative Tätigkeiten durchführen, die natürlich nicht für andere Nutzertypen zur Verfügung stehen. Der Admin Controller würde einerseits sehr aufgeblasen, andererseits hab ich mich aber schon mal bei einem Projekt geärgert, wenn nachher alle möglichen Admin Actions auf zig Controller verteilt sind.

    Ich glaub ich werde daher deiner Empfehlung folgen und alles im Admin Controller einbauen. :)

  • Admin-Actions gibt es in dem Sinne für mich gar nicht. Es gibt gewisse Actions die man nur mit entsprechender Berechtigung ausführen darf, sei es nun Sperren/Freischalten von User, Erstellen neuer oder Bearbeiten bestehender Inhalte etc.
    Diese Aufgaben haben an sich nichts mit einem Admin zu tun, das Sperren/Freischalten von Usern ist z.B. eine Aufgabe die in den Bereich des User-Controllers fällt. Der einzige Bezug zum Admin ist die benötigte Berechtigung, aber nicht die eigentliche Action.
    Was ist denn wenn du jetzt neben Administratoren z.B. noch Moderatoren einführen möchtest, die weniger Rechte als der Admin, aber mehr Rechte als der normale Benutzer haben? Wieder einen eigenen Controller in dem du dann lauter Methoden aus deinem Admin-Controller kopieren musst?

    Alle Aufgaben die ein Admin durchführen darf in einen eigenen Admin-Controller zu packen ist in meinen Augen ein ganz klares Fehldesign. Arbeite lieber mit einem vernünftigen und flexiblen Rechtesystem, das lässt sich dann auch in anderen Projekten wiederverwenden.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Danke da hatte ich noch gar nicht dran gedacht. Ich war so auf das "getrennte" Admin Backend im eigenen Design" fixiert, dass man da an liebsten eine Trennung machen möchte ;). Da ich eine ACL einsetze, welche die Userrechte pro Controller Action prüft wäre das natürlich wirklich nicht klug, wenn man nachher für einen Moderator alles dupliziert.

  • Generell kann ein Admin-Controller durchaus auch Sinn machen, das hängt von den konkreten Anforderungen ab. Aber er dient dann eher als eine Art "Vermittler" für einen eigenen View (Admin-Bereich einer Website) wo gebündelt z.B. CRUD-Methoden für verschiedene MVC-Triaden bereitgestellt werden. Der Admin-Controller wird dann zwar von diesem View über den Request aufgerufen, leitet die eigentlichen Aufgabe (CRUD) aber an die entsprechenden Controller weiter.

    Edit: Das ist halt meine Herangehensweise mit der ich persönlich gut zurecht komme und die ich als sinnvoll erachte. Kein Anspruch auf den heiligen Gral. :D

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook