【发布时间】:2023-09-28 15:05:01
【问题描述】:
我安装了 spatie/laravel-permission,但我不能使用 role 默认的 spaite 方法。
在User 模型中,我添加了HasRoles:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
{
use HasApiTokens, HasFactory, Notifiable, HasRoles;
const ACTIVE = 'active';
const LOCKED = 'locked';
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'name',
'username',
'status',
'email',
'password',
'password_updated_at'
];
/**
* The attributes that should be hidden for serialization.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
// public function roles(): BelongsToMany
// {
// return $this->belongsToMany(\App\Models\Role::class, 'user_has_roles', 'user_id');
// }
public function getJWTIdentifier() {
return $this->getKey();
}
public function getJWTCustomClaims() {
return [];
}
}
如果我定义新的 roles 方法覆盖 spatie 的方法(评论部分),我将从代码中获取角色:
\App\Models\User::find(1)->first()->roles()->get()->toArray()
结果是:
array:1 [
0 => array:6 [
"id" => 1
"name" => "admin"
"guard_name" => "api"
"created_at" => "2021-10-19T18:23:20.000000Z"
"updated_at" => "2021-10-19T18:23:20.000000Z"
"pivot" => array:2 [
"user_id" => 1
"role_id" => 1
]
]
]
但是如果我使用roles 方法默认下面的 spatie 代码不是结果,这是我运行时的结果:
[]
我找了很多,但没有结果,希望有人能帮助我,谢谢。
【问题讨论】:
-
auth()->user()->roles;的结果是什么 -
结果为:
Illuminate\Database\Eloquent\Collection {#1096 #items: [] }
标签: php laravel laravel-permission