2016-04-28 10 views
0

In Laravel 4.2 wählen, ich habe die folgende Route:Wie man einen Controller in den Routen

Route::group(array('before' => 'auth'), function() { 
    Route::post('/account/edit', array(
     'as' => 'account-edit', 
     'uses' => '[email protected]' 
    )); 
}); 

Ich habe ein ClientController und eine AdminController für gemeinsame Benutzer und Administrator ist.

Angenommen, ich kenne den Benutzertyp (Auth::getUser()->getType()), wie kann ich den UserController durch den richtigen Controller ersetzen, ohne zusätzliche Logik zur Routen-Klasse hinzuzufügen? Kann das mit Filtern gemacht werden?

Ich versuche, einen zusätzlichen Controller zwischen den Routen und dem endgültigen Controller zu vermeiden.

+0

Vielleicht, wenn Sie eine Frage downvote, könnten Sie erklären, warum, um es zu verbessern, oder? – mutsa

Antwort

0

Eigentlich ist es nicht notwendig, zwei Benutzer-Controller zu erstellen. Verwenden Sie einfach Middleware, um die Zugriffsrechte von Clients zu begrenzen. Auf diese Weise können Sie das Original UserController behalten.

Sie können IsAdmin.php in der Middleware hinzufügen.

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Http\RedirectResponse; 
use Illuminate\Contracts\Auth\Guard; 

class IsAdmin { 

    public function handle($request, Closure $next) 
    { 

     if (Auth::getUser()->getType() === 'admin') 
     { 
      return $next($request); 
     } 
     return new RedirectResponse(url('/')); 
    } 

} 

In kernel.php, müssen Sie Ihre Middleware deklarieren.

protected $routeMiddleware = [ 
     // some other middlewares 
     'admin' => 'App\Http\Middleware\IsAdmin', 
    ]; 

Dann fügen Sie die folgenden Anweisungen in public function __construct der UserController.php

$this->middleware('admin', ['only' => ['OnlyForAdmin1','OnlyForAdmin2']]); 

So Kunden OnlyForAdmin2 keinen Zugriff auf die Funktion OnlyForAdmin1 und Funktion haben.

+0

Tks @HongbinWangI, aber glaube nicht, dass Laravel 4.2 Middlewares unterstützt – mutsa

+0

Es tut mir leid, dass ich deine Laravel-Version ignoriert habe. –