You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用Spatie包查询特定角色/权限ID时出现Sanctum Guard错误

问题解决:Laravel Sanctum + Spatie ACL 查询特定角色/权限ID时的Guard错误

问题原因

Spatie的findById()、findByName()这类方法会默认使用配置文件中指定的Guard(默认值为web),而你的API使用的是Sanctum Guard,两者不匹配导致权限校验失败。而查询全部角色/权限用的是普通Eloquent查询,不涉及Guard校验逻辑,因此可以正常运行。

解决方案

方案1:全局设置默认Guard为Sanctum

修改config/permission.php配置文件,找到default_guard项,将其值改为sanctum:

'default_guard' => 'sanctum',

修改后执行配置缓存刷新:

php artisan config:cache

方案2:调用方法时显式指定Guard

如果需要保留多Guard场景(比如同时支持web页面和sanctum API),可以在调用findById()时传入Sanctum Guard作为第二个参数:

public function create()
{
    $role = Role::orderBy('id', 'DESC')->get();
    // 第二个参数指定使用sanctum guard
    $role_user = Role::findById(3, 'sanctum');

    return response([
        'status' => true,
        'role' => $role,
        'role_user' => $role_user
    ], 200);
}

方案3:确保权限配置包含Sanctum Guard

检查config/permission.php中的guards数组,确认已添加sanctum配置:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'sanctum' => [
        'driver' => 'sanctum',
        'provider' => 'users',
    ],
],

同时确认config/auth.php中providers配置指向正确的User模型:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
],

内容的提问来源于stack exchange,提问作者Labeeque Sarwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:25:08