首页 > 解决方案 > 在 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;
}

问题是创建了用户但未分配角色。也没有错误。任何人都可以在这里帮助我吗?

标签: phplaravel-5

解决方案


您应该将角色直接附加到用户,因此:

$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;
}

推荐阅读