Laravel 使用中间件授权

Laravel authorization using middleware

我有以下表格:

角色Table

  1. ID
  2. 标题

权限Table

  1. ID
  2. 标题
  3. Role_id
  4. 权限(例如:{test:"create","edit","update","delete"})

现在登录后如何通过中间件检查特定用户是否具有上述权限,他是否可以create/edit/update/delete。

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

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

而是想借助中间件进行检查。

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

这样我就不必在每次添加新角色和对这些角色的权限时都在路由中指定单独的权限。

谢谢

您需要创建一个中间件,并在该中间件的 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
];