laravel 当我使用 spatie 中间件时处理程序总是 return false

laravel handler always return false when i use spatie middleware

我正在尝试为 Laravel API 项目中的用户创建权限和角色。我正在使用 Passport 和 Spatie 的许可包。使用它我添加了一个中间件:

路线

Route::middleware('auth:api')->group(function () {
    /** Roles Route */
        Route::get('roles',[RoleController::class, 'index'])->middleware('permission:role-list');
}

Handler.php:

        public function render($request, Throwable $exception)
    {
        if ($exception instanceof UnauthorizedException) {
            return response()->json(['User does not have the right roles.'],403);
        }

    return parent::render($request, $exception);
    }

控制器:

        function __construct()
    {
        $this->middleware('permission:role-list', ['only' => ['index']]);
        $this->middleware('permission:role-create', ['only' => ['store']]);
        $this->middleware('permission:role-edit', ['only' => ['update']]);
        $this->middleware('permission:role-delete', ['only' => ['destroy']]);
    }
    public function index()
    {
        $roles = Role::all();
        return response(['role' => $roles], 200);

    }

我创建了一个管理员帐户并获得了所有现有权限,但每当我询问路线时,它都会向我显示错误消息:

User does not have the right roles.

我检查了数据库,用户拥有所有必需的权限。

首先按照here的描述在Kernel.php中添加包中间件。

protected $routeMiddleware = [
    // ... other middleware
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
    'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
];

根据您要定义访问方法的权限的位置,可以在控制器中或在路由中定义它们。将它们添加到路由和控制器只是做同样的事情。

不需要更改 Handler.php 中的内容。

请注意,权限可以有不同的guards。例如它可以是 webapi.

更改角色或权限后,有时重置缓存会有所帮助。可以使用 php artisan permission:cache-reset command.

重置缓存