使用中间件进行Laravel授权

时间:2017-04-08 12:56:56

标签: laravel authorization laravel-5.3

我有以下表格:

角色表

  1. ID
  2. 标题
  3. 权限表

    1. ID
    2. 标题
    3. ROLE_ID
    4. 权限(例如:{test:“create”,“edit”,“update”,“delete”})
    5. 现在登录后我如何通过中间件检查该特定用户是否具有以上权限,是否可以创建/编辑/更新/删除。

      我不想在路由中指定权限或角色名称。

      Route::group(['permission'=>'create-user'] ...
      

      反而希望在中间件的帮助下进行检查。

      Route::group(['middleware'=>'authorization'] ...
      

      因此,每次添加新角色和对这些角色的权限时,我都不必在路由中指定个人权限。

      三江源

1 个答案:

答案 0 :(得分:2)

您需要创建一个中间件,并在该中间件的handle方法中检查权限

public function handle($request, Closure $next, $guard = null)
{
    $records = DB::table('role_table')
                  ->join('permissions_table', 'role_table.ID', '=', 'permissions_table.Role_id')
                  ->select('permissions_table.Permissions')
                  ->first();

    if (count($records) > 0) {

        $permisssions = json_decode($records->Permissions, true);

        if (in_array("create", $permissions['test'])) {
           // has permission to create
           // redirect to the authorized page 
        }
        ...

    } else {
       return redirect('to access denied page');
    }

    return $next($request);
}

将中间件添加到App\Http\Kernel.php $routeMiddleware数组

protected $routeMiddleware = [
 'authorization' => \App\Http\Middleware\AuthorizationMiddleware::class
];