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。例如它可以是 web
或 api
.
更改角色或权限后,有时重置缓存会有所帮助。可以使用 php artisan permission:cache-reset
command.
重置缓存
我正在尝试为 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。例如它可以是 web
或 api
.
更改角色或权限后,有时重置缓存会有所帮助。可以使用 php artisan permission:cache-reset
command.