Обновление плагина 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
в соответствии с новым пространством имен. Потом все заработало нормально.