简体   繁体   中英

How to assign a role in Laravel's default AuthController

I want to assign a role to user during sign up in Laravel 5.2 default AuthController, so how to do this if anyone idea? Here I have three tables users , roles and user_roles thanks

My migrations: users_migration:

public function up()
{
   Schema::create('users', function (Blueprint $table) {
     $table->increments('id');
     $table->string('name');
     $table->string('email')->unique();
     $table->string('password', 60);
     $table->rememberToken();
     $table->timestamps();
  });
}

user_role:

public function up()
{
   Schema::create('user_roles', function (Blueprint $table) {
     $table->increments('id');
     $table->integer('user_id');
     $table->integer('role_id');
     $table->timestamps();
   });
}

roles migration:

 public function up()
{
   Schema::create('roles', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name', 60);
    $table->text('description');
    $table->timestamps();
   });
 }

And the models:

User model:

  .
  .
  .
public function roles()
{
    return $this->belongsToMany('App\Role', 'user_roles','user_id','role_id');
}

Role model:

class Role extends Model
   {
      protected $primaryKey = 'r_id';

     public function users()
   {
       return $this->belongsToMany('App\User',    'user_roles','role_id','user_id');
   }
}

here are what I do but you can change it whatever you want.

i'll override register() of registerUsers trait in AuthController.

public function register(Request $request)
{
  //your logic

  $roles = $request->input('role_id');

  $method = $roles instanceof Role ? 'save' : 'saveMany';
  //you can use foreach too
  $user->roles()->$method($roles);

}

as mentioned at the docs you can use $user->roles()->attach($roleId) to attach roles to user

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM