laravel-permission 用来控制接口的权限(更细致入微,易操作),sanctum 也是用来控制权限(路由),两者一起使用,会引起 guard 的错误。这个需要好好的处理一下。
常见报错如下:
The given role or permission should use guard `web` instead of `sanctum`.
laravel-permission 使用的 guard 是默认的,而 sanctum 使用的是 sanctum。 我们手动设置 guard 默认的 guard 为 sanctum,并在 User 模型中,指定为 sanctum 即可。
### 操作一波
config/auth.php 中增加 sanctum 的配置,并设置 default 的 guard 为 sanctum。其实,复制 web 的改个名就好。如:
<?php
return [
'defaults' => [
// 'guard' => 'web',
'guard' => 'sanctum',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
// 新增
'sanctum' => [
'driver' => 'session',
'provider' => 'users',
],
],
然后在 user 模型中增加指定。
protected $guard_name = 'sanctum'
到此就 ok 了。