Laravel 5 和委托。如何同时保存用户和附加角色

Posted

技术标签:

【中文标题】Laravel 5 和委托。如何同时保存用户和附加角色【英文标题】:Laravel 5 and Entrust. How to save user and attach role at the same time 【发布时间】:2015-07-11 22:48:16 【问题描述】:

有人在 Laravel 5 中尝试过 Entrust for User Roles & Permissions 吗?

我想同时添加和保存用户并附加角色。这是我的代码

     $role = Role::where('name','=','admin')->first();
     $user = new User();
     $user->name = Input::get('name');
     $user->email = Input::get('email');
     $user->password = Hash::make(Input::get('password'));
      if($user->save())
          $user->attachRole($role);
          return redirect('dashboard/users')->with('success-message','New user has been added');
      

但是$user->attachRole($role); 不能工作,虽然它可以在我的databaseSeeder 上工作,但不能在我的 UserController 上工作。

【问题讨论】:

【参考方案1】:

我认为你有这个问题,因为你从来没有保存在数据库中。 试试这样的。

 $role = Role::where('name','=','admin')->first();
 $user = new User();
 $user->name = Input::get('name');
 $user->email = Input::get('email');
 $user->password = Hash::make(Input::get('password'));
 $user->save()
 $user->attachRole($role);
 return redirect('dashboard/users')->with('success-message','New user has been added');

当然,这种方法只有在你使用 laravel 的自动增量功能自动增加模型的 id 时才有效。如果您使用 uuid 之类的东西来唯一标识您的字段,您还应该在模型中包含 public $incrementing = false;

确保在模型中包含 HasRole 特征。

还可以看看 Akarun 的答案,因为它也可以工作。create 方法,创建一个新实例并保存到数据库,所以你不需要$user->save()

【讨论】:

【参考方案2】:

我也使用“委托”来管理我的用户权限,但我使用create 语法来存储我的用户。然后我使用“roles()->attach”,像这样:

$user = User::create($this->userInputs($request));
$user->roles()->attach($request->input('role'));

【讨论】:

【参考方案3】:

我正在使用 Laravel 5 附带的提供的 Auth 设置并进行了我自己的调整,所以我只需在 Registrar.php 中执行以下操作:

public function create( array $data )

    // Create a new user, and assign it to 'new_user'
    $new_user = User::create( [
        'username'  => $data['username'], //<< Specific to my own db setup
        'email'     => $data['email'],
        'password'  => bcrypt( $data['password'] ),
    ] );

    // Initiate the 'member' Role
    $member = Role::where( 'name', '=', 'member' )->first();
    // Give each new user the role of 'member'
    $new_user->attachRole( $member );

    // Return the new user with member role attached
    return $new_user; //<<Or whatever you do next with your new user

您只需要确保在文件顶部使用 App\Role。非常适合我。

【讨论】:

以上是关于Laravel 5 和委托。如何同时保存用户和附加角色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5.2 后同时获取电子邮件和密码

如何修复 laravel 5.2 zizaco 委托:迁移类名验证?

Laravel ManytoMany:如何在用户注册时将产品附加到用户?

如何在 laravel 身份验证期间附加到用户创建多个复选框

如何将变量附加到 Auth::user() 然后保存并缓存它?

如何在 Laravel 5.8 中附加授权标头