我正在尝试从带有角色的请求中获取经过身份验证的用户对象。我用的是斯帕蒂拉拉-权限和Laravel 8。
从请求中获取用户对象,如下
$request->user()->getRoleNames()->pluck('name');
return $request->user();返回
{
"id":1,
"name":"User name",
"email":"User email",
"email_verified_at":null,
"company":"--",
"phone":"--",
"created_at":"--",
"updated_at":"--",
"roles":[
{
"id":1,
"name":"Super Admin",
"guard_name":"web",
"created_at":"--",
"updated_at":"--",
"pivot":{
"model_id":1,
"role_id":1,
"model_type":"App\\Models\\User"
}
}
]
}我需要归还的东西
{
"id":1,
"name":"User name",
"email":"User email",
"email_verified_at":null,
"company":"--",
"phone":"--",
"created_at":"--",
"updated_at":"--",
"roles":["Super Admin"]
}发布于 2020-10-27 20:17:40
另一种选择是使用hidden、appends和访问器,比如getRoleNamesAttribute()。
class User extends Model {
...
// This will hide `roles` from your `User`, when converted to JSON/Array/etc
protected $hidden = ['roles'];
// This will add `role_names` to your `User`, when converted to JSON/Array/etc
protected $appends = ['role_names'];
// Accessible via `$user->role_names`, or `user.role_names` in JSON
public function getRoleNamesAttribute() {
return $this->roles->pluck('name');
}
... // Everything else
}这样做,与return $request->user();一起将自动使roles不可见,并附加role_names。在您的代码中,您应该得到输出:
{
"id":1,
"name":"User name",
"email":"User email",
"email_verified_at":null,
"company":"--",
"phone":"--",
"created_at":"--",
"updated_at":"--",
"role_names":["Super Admin"]
}发布于 2020-10-27 20:01:40
将roles添加到用户对象中,如下所示
$user = $request->user();
$user->roles = $user->roles()->pluck('name');
return $user;发布于 2021-11-11 09:47:23
您也可以这样做:
$user->roles = User::find($user->id)->getRoleNames();https://stackoverflow.com/questions/64561953
复制相似问题