【发布时间】:2018-05-13 14:56:36
【问题描述】:
我已经制作了一个角色中间件来检查用户是否具有特定的角色:
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->user() === null) {
return response("Insufficient permissions", 401);
}
$actions = $request->route()->getAction();
$roles = isset($actions['roles']) ? $actions['roles'] : null;
if ($request->user()->hasAnyRole($roles) || !$roles) {
return $next($request);
}
return response("Insufficient permissions", 401);
}
}
如果我想检查特定角色中的某个角色,这很容易。我只需要添加中间件和一个名为roles 的附加操作。例如:
Route::get('payments/{id}/pay', [
'uses' => 'PaymentController@aprove',
'as' => 'payments.aprove',
'middleware' => 'roles',
'roles' => [User::ADMINISTRATOR, User::SPOT_MANAGER, User::SELECTION_PROCESS_MANAGER],
]);
这样做可以按预期工作。但是,我有一些路线是 Route::resource 而不是 get、post 或类似的东西。 Laravel 不允许在资源中指定 roles => [...]。
文档说,如果我想在资源上注入中间件,我 should do this on controller。但是我不能像以前在任何地方的正常路线中那样指定roles => [...]!我怎么能这样做?
提前致谢。
【问题讨论】:
标签: php laravel controller routing laravel-5.5