我有一个具有我的权限的表,我希望能够设置如下所示的路由,以便检查登录用户的权限,例如查看他们是否有权访问edit_users页面。
Route::group([ 'prefix' => 'users', 'middleware' => 'can:access,edit_users' ], static function() {
我添加了以下Gate,我将在其中进行查询和检查,但是$permission
为空...
public function boot()
{
$this->registerPolicies();
Gate::define('access', static function ($user, $permission) {
dd($user, $permission);
});
}
我将如何去做?因为我不想将所有权限硬编码到门中!
答案 0 :(得分:1)
默认中间件将路由参数作为第二个参数传递。我认为在这种情况下,您需要做的是编写自己的以字符串为参数的中间件,然后手动进行检查。
namespace App\Http\Middleware;
use Closure;
class HasPermission {
public function handle($request, Closure $next, $permission)
{
if($request->user()->can('access', $permission)) {
return $next($request);
}
return redirect()->back();
}
}
然后在内核文件中注册新的中间件
'hasPermission' => \App\Http\Middleware\HasPermission::class
然后,您可以在路由中使用新的中间件代替can
中间件。
Route::group([ 'prefix' => 'users', 'middleware' => 'hasPermission:edit_users' ], function() {});