Обновление плагина Laravel и Spatie Permissions не работает

Я выполнил давно назревшее обновление проекта Laravel с версии 5.7 (с разрешениями Spatie 2.21) до версии 9 с Spatie 5.5.0. Я не получаю никакой ошибки, но hasRole()функция больше никогда не возвращает true для пользователей, у которых определенно есть роль. Эхо Auth::user()->getRoleNames()для пользователя просто возвращает пустой массив. Мы будем очень признательны за любые рекомендации.

Глядя на мои старые коммиты, кажется, что помимо composer.jsonдобавления и миграции базы данных, что мне нужно было только отредактировать модель пользователя:

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

class User extends Authenticatable
{
    use HasRoles;
...

И этот конфиг (комментарии удалены):

      <?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' => [
        'model_morph_key' => 'model_id',
    ],
    'cache_expiration_time' => 60 * 24,
    'display_permission_in_exception' => false,
];

2 ответа

Ниже несколько вещей, которые я хотел бы попробовать

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

Попробуйте эхо ниже строки сразу после назначения

      echo $user()->getRoleNames()

Также попробуйте получить с отношениями

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

Это скажет вам, по крайней мере, назначение ролей работает.

Оказывается, это было связано с другой проблемой, которую я, к счастью, пытался решить в то же время:

Обновление Laravel сломало пути модели

Причина этой проблемы с разрешениями была в базе данных, а не в именах таблиц/полей, а на самом деле в содержимом полей.

в model_has_rolesстол, старый App\Userбыло использовано пространство имен (надеюсь, я правильно использую «пространство имен»!) и должно было быть App\Models\Userв соответствии с новым пространством имен. Потом все заработало нормально.

Другие вопросы по тегам