2016-07-31 7 views
1

Laravel 5.2Wie Laravel Multiple Auth-Schutz für gleiche Controller

Ich habe und mehrere Auth Gard unter

 

Admin 
Clients 
Employee 

i

haben
 
ItemController 
     ->index.blade.php 
     ->create.blade.php 
     ->edit.blade.php 

ItemKitController 
     ->index.blade.php 
     ->create.blade.php 
     ->edit.blade.php 
 

Ich möchte Client verwenden gegeben verwenden und Mitarbeiter Wachen Sie auf, um auf denselben Controller zuzugreifen und die oben genannte Erwähnung zu sehen.

ist ihre jede mögliche Weise.

+0

Ich denke, Sie versuchen, Richtlinien mit Guard zu implementieren. Ihr Anwendungsfall sollte eine Richtlinie verwenden. –

+0

NEIN Ich implementiere keine Richtlinie –

+0

Wächter ist für die Authentifizierung, während Richtlinien für die Autorisierung sind. Mit anderen Worten, Sie verwenden Wächter, um JWT für die API und die normale Authentifizierung für das Web zu verwenden. Für verschiedene Zugriffsrechte gemäß Ihrem Beispiel ist dies jedoch eine Autorisierung, die durch Richtlinien vorgenommen werden kann. –

Antwort

0

können Sie verwenden Middleware wie:

Route::group([ 'middleware' => ['Admin', 'Clients', 'Employee'] ], function(){ 
    Route::get('/Admin', '[email protected]'); 
    Route::get('/Clients', '[email protected]'); 
    Route::get('/Employee', '[email protected]'); 

}); 

Zum Beispiel habe ich ein Admin-Middleware, die, wenn der Benutzer-ID überprüft 1

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Auth; 
use Log; 

class AuthAdmin 
{ 
    private $admins; // Admin ids 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $this->admins = config('custom.admins'); // get configs 
     $user = Auth::user(); 

     if($user->id != 1)){ 
      // not admin, redirect home 
      return redirect('/'); 
     } 

     // is admin, let request continue 
     return $next($request); 
    } 
} 

Dann haben Sie es zu Kernel.php hinzufügen " $ routeMiddleware ":

protected $routeMiddleware = [ 
     'auth' => \App\Http\Middleware\Authenticate::class, 
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
     'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 
     'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
     'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 

     // Custom Middleware 
     // Auth Admin 
     'auth_admin' => \App\Http\Middleware\AuthAdmin::class, 
    ]; 

Da ist in meiner Route:

Route::group([ 'middleware' => ['auth_admin'] ], function(){ 

    // nobody can come to these routes but admins 
    Route::get('/admin/index', '[email protected]'); 
}); 
+1

Ich möchte verschiedene Auth Wache für den gleichen Controller ("Auth: Client", "Auth: Mitarbeiter") –