如何对同一控制器使用 laravel 多重身份验证防护

Muk*_*tel 5 php laravel laravel-5

拉拉维尔 5.2

我有多个身份验证 Gard,如下所示

行政
客户
员工

我有

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

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

我想使用 Client 和 Employee Guard 访问上面提到的相同控制器和视图。

是他们任何可能的方式。

小智 6

也许你想要这样的东西

public function __construct()
    {
        $this->middleware('auth:Admin,Clients,Employee');
    }
Run Code Online (Sandbox Code Playgroud)

在你的控制器中


cma*_*mac 1

您可以使用中间件,例如:

Route::group([ 'middleware' => ['Admin', 'Clients', 'Employee'] ], function(){
  Route::get('/Admin', 'AdminController@index');
  Route::get('/Clients', 'ClientsController@index');
  Route::get('/Employee', 'EmployeeController@index');

});
Run Code Online (Sandbox Code Playgroud)

例如,我有一个管理中间件,用于检查用户 id 是否为 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你必须将其添加到 Kernel.php“$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,
    ];
Run Code Online (Sandbox Code Playgroud)

然后在我的路线中:

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

    // nobody can come to these routes but admins
    Route::get('/admin/index', 'AdminController@index');
});
Run Code Online (Sandbox Code Playgroud)