【问题标题】:Laravel authorization using middlewareLaravel 使用中间件授权
【发布时间】:2017-09-03 19:09:16
【问题描述】:
我有以下表格:
角色表
- 身份证
- 标题
权限表
- 身份证
- 标题
- Role_id
- 权限(例如:{test:"create","edit","update","delete"})
现在登录后如何通过中间件检查该特定用户是否具有上述权限,是否可以创建/编辑/更新/删除。
我不想在路由中指定权限或角色名称。
Route::group(['permission'=>'create-user'] ...
而是想借助中间件进行检查。
Route::group(['middleware'=>'authorization'] ...
这样我就不必在每次添加新角色和对这些角色的权限时在路由中指定单独的权限。
谢谢
【问题讨论】:
标签:
laravel
authorization
laravel-5.3
【解决方案1】:
您需要创建一个中间件,并在该中间件的句柄方法中检查权限
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
];