Laravel 和 Spatie 权限插件更新不起作用

Laravel and Spatie Permissions plugin update not working

我对 Laravel 项目进行了一次迟来的更新,从 v5.7(使用 Spatie Permissions 2.21)到使用 Spatie 5.5.0 的 v9。我没有收到任何错误,但 hasRole() 函数不再 returns 对绝对具有该角色的用户为真。为用户回显 Auth::user()->getRoleNames() 只是 returns 一个空数组。任何指导将不胜感激。

查看我的旧提交,似乎除了 composer.json 添加和数据库迁移之外,我唯一需要做的就是用户模型编辑:

...
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
...

还有这个 config/permission.php(删除评论):

<?php
return [
    'models' => [
        'permission' => Spatie\Permission\Models\Permission::class,
        'role' => Spatie\Permission\Models\Role::class,
    ],
    'table_names' => [
        'roles' => 'roles',
        'permissions' => 'permissions',
        'model_has_permissions' => 'model_has_permissions',
        'model_has_roles' => 'model_has_roles',
        'role_has_permissions' => 'role_has_permissions',
    ],
    'column_names' => [
        'role_pivot_key' => null, //default 'role_id',
        'permission_pivot_key' => null, //default 'permission_id',
        'model_morph_key' => 'model_id',
        'team_foreign_key' => 'team_id',
    ],
    'register_permission_check_method' => true,
    'teams' => false,
    'display_permission_in_exception' => false,
    'display_role_in_exception' => false,
    'enable_wildcard_permission' => false,
    'cache' => [
        'expiration_time' => \DateInterval::createFromDateString('24 hours'),
        'key' => 'spatie.permission.cache',
        'store' => 'default',
    ],
];

以下几件事我想尝试

$user->assignRole($this->roles)

在赋值后尝试在行下方回显

echo $user()->getRoleNames()

也尝试使用关系获取

Dump($user->with('roles')->get()

它会告诉您至少角色分配有效。

事实证明这与我遇到的另一个问题有关,幸运的是我同时尝试修复:

此权限问题的原因在数据库中,而不是 table / 字段名称,实际上是字段内容。

model_has_roles table 中,使用了旧的 App\User 命名空间(希望我在那里正确使用了“命名空间”!)并且应该是 App\Models\User符合新的命名空间。然后一切正常。