php - 在 Entrust 和 Laravel 5.6 注册时添加默认角色
问题描述
我正在尝试学习 Laravel,并且正在检查一些 ACL。目前我正在测试 Entrust/Zizaco,我正在尝试在用户注册时添加默认角色。
我已将其添加到 create 函数中RegisterController.php
$user = User::find($create->id);
$role = Role::where('name', '=', 'customers')->firstOrFail();
$user->roles()->attachRole($role->id);
这是全功能
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$user = User::find($create->id);
$role = Role::where('name', '=', 'customers')->firstOrFail();
$user->roles()->attachRole($role->id);
return $user;
}
问题是创建了用户但未分配角色。也没有错误。任何人都可以在这里帮助我吗?
解决方案
您应该将角色直接附加到用户,因此:
$user->roles()->attachRole($role->id);
应该
$user->attachRole($role); OR $user->roles()->attach($role->id);
您可以阅读有关它的更多信息并在以下位置找到示例:https ://github.com/Zizaco/entrust#concepts
更新
在您的 create 函数中,您直接返回创建的用户,因此该函数停在那里。更改它,以便您分配创建的用户,并在角色附加后稍后将其返回。
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$role = Role::where('name', '=', 'customers')->firstOrFail();
$user->attachRole($role);
return $user;
}
推荐阅读
- typescript - 初始化 Sentry 的 Vuejs(使用 Typescript)集成的代码构建失败
- node.js - 未安装 npm
- node.js - 从 Spotify Api 获取信息时遇到问题
- css - Vue.js 中的自定义列表重新排序动画
- r - 与单位无关的 position_nudge
- android - 尽管导航抽屉可见并打开,但侧面导航抽屉项目单击不起作用
- maven - Artifactory 检索最新并忽略 maven-metadata.xml
- mongodb - Nestjs Mongoose,如何通过 _id 删除数组成员?
- c - 字节数据类型函数在 C 中返回什么
- sql - 使用两个日期/时间戳列计算 pod 的总运行时间