使用Laravel-permission时有正确的permission还是报403错误

1. 运行环境

1). 当前使用的 Laravel 版本?

9.22.1

2). 当前使用的 php/php-fpm 版本?

PHP 版本:8.1.8

php-fpm 版本:8.1.8

3). 当前系统

ubuntu:22.04

4). 业务环境

开发环境

5). 相关软件版本

laravel/framework:9.22.1
spatie/laravel-permission:5.5.5

2. 问题描述?

用新版本laravel重构之前项目时碰到的问题,前端是用vue做的单页面应用,所以前端和服务器之间的数据通信大部分都是通过api,以前代码正常运行没有问题,但是在新版本中会在Spatie\Permission检查权限时报错403
UsersController如下(仅提供了权限检查部分)

public function __construct()
    {
        $this->middleware('permission:administrator', ['except' => ['getCurrentUser']]);
    }

我尝试把permission改成role,莫名就能正常检查到权限了,然后我仔细检查了授权情况,确认用户是具有对应权限的,在前端查询权限时返回的数据如下

hasP: false
hasR: true
permissions: ["administrator", "eee"]
roles: ["administrator"]

hasP$user->hasAnyPermission(['administrator']);返回的结果,hasR$user->hasAnyRole(['administrator']);返回的结果,能返回两个不同的结果也是把我搞晕了。
后来我用hasAllPermissions再做权限检查,会报错There is no permission named administrator for guard api.到这里我有点明白了,于是到permissions表里把administratorguard_nameweb改成api,然后清除缓存,成功检查到对应的权限
但是这仍然没有解决我的困惑,roles表里administratorguard_name也是web,但是用role的时候能正常检查到权限,为什么permission就不行呢?
附上auth.php中的代码

<?php

return [
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
    ],
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],
    'password_timeout' => 10800,
];

希望有大佬能解决下我的困惑,为什么role可以permission不行?我是否应该把默认的guard_name都改成api

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

可以自己写权限控制

2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!