Laravel,添加门以查看用户是否具有访问权限

时间:2019-05-08 15:38:31

标签: php laravel

我有一个具有我的权限的表,我希望能够设置如下所示的路由,以便检查登录用户的权限,例如查看他们是否有权访问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);
    });
}

我将如何去做?因为我不想将所有权限硬编码到门中!

1 个答案:

答案 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() {});
相关问题