我的路线设置如下:
Route::prefix('/admin/{company}')->group(function() {
Route::resource("employees", "Admin\EmployeesController");
Route::resource("jobs", "Admin\JobsController");
// and few other routes
})->middleware('admin');
之前,我使用的是{companyId}
,但现在想更改它以进行模型绑定。我的中间件正在通过$companyId = $request->route('companyId');
public function handle($request, Closure $next)
{
$id = $request->route('companyId');
$adminRole = Role::where('name', 'admin')->first();
if (!Auth::user()->userRoles->where('company_id', $id)->where('role_id', $adminRole->id)->count()) {
return response("Unauthorized action", 403);
}
return $next($request);
}
当我重构时使用模型绑定{company}
而不是{companyId}
参数时,我意识到了诸如Gates和Policies之类的东西。我是否需要利用Gates或Policys做它的好方法?
但是,我可能不想为我的每条路线或我的每一项资源都使用它,因为已经在其中定义了/admin
前缀。有没有一种方法可以根据前缀设置门或策略?
有什么好的方法可以使代码看起来更好?