Ich baue eine Bloganwendung mit Laravel 4 die zwei Arten von Benutzern hat, den Administrator und den normalen Benutzer.
Wenn Benutzer ihre Konten erstellen oder sich anmelden, haben alle ihre Routen die "Benutzer" Präfix , wie folgt:
GET user/posts = PostsController@index
Für Administratoren haben alle ihre Routen die "Administrator" Präfix , so:
GET admin/users = UsersController@index
Um alle Beiträge eines Benutzers als Administrator anzuzeigen, gehe ich wie folgt vor:
GET admin/users/($id)/posts = PostsController@index
Wenn also ein normaler Benutzer angemeldet ist, bekomme ich seinen ID aus Sitzung, aber wenn der Benutzer ein Administrator ist, bekomme ich den normalen Benutzer ID aus der URL.
Ich muss auch die Links in den Ansichten aktualisieren, wie folgt:
Als regelmäßiger Benutzer: link_to("Benutzer/Beiträge/Erstellen", "Beitrag erstellen")
Als Administrator: link_to("admin/users/1/posts/create", "Beitrag erstellen")
Gibt es hierfür einen besseren Ansatz?
Antworten:
0 für die Antwort № 1Ja, alle Benutzer sind Benutzer.
Alles, was erfordert, dass Sie ein Administrator sind, sollte einen Filter dafür auf der Route haben.
Wenn also beispielsweise ein Administrator nur zu user/posts/delete/{id}
, diese Route würde ungefähr so aussehen...
Route::post("user/posts/delete/{id}", array("before" => "adminFilter", "uses" => "PostController@deletePost");
Ich bin mir nicht sicher, wie Sie herausfinden, ob ein Benutzer ein Administrator oder ein normaler Benutzer ist, aber Ihr Filter könnte etwa so aussehen ...
Route::filter("adminFilter", function()
{
if (!Auth::user()->isAdmin())
{
return Redirect::to("home")->with("message", "You aren"t an admin!");
}
});
Und du würdest einfach ein isAdmin()
Funktion in Ihrem User
Modell, das beschreibt, wie festgestellt wird, ob ein Benutzer Administrator ist, und true oder false zurückgibt.