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
符合新的命名空间。然后一切正常。
我对 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
符合新的命名空间。然后一切正常。