2017-07-07 54 views
0

我儘量附上我作爲用戶的默認角色的一個角色在註冊時,我嘗試了不同的方式,如這篇文章https://linustechtips.com/main/topic/802733-laravel-54-attaching-role-on-registration/但沒有任何工程:在登記時laravel附加角色給用戶5.4

角色我嘗試連接到登記表的情況下,name => userid => 3你想幫助我的編碼

這裏是我的登記表:

<?php 

namespace App\Http\Controllers\Auth; 

use App\User; 
use App\Role; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Validator; 
use Illuminate\Foundation\Auth\RegistersUsers; 

class RegisterController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Register Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users as well as their 
    | validation and creation. By default this controller uses a trait to 
    | provide this functionality without requiring any additional code. 
    | 
    */ 

    use RegistersUsers; 

    /** 
    * Where to redirect users after registration. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/home'; 

    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest'); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'fname' => 'required|string|max:255', 
      'lname' => 'required|string|max:255', 
      'username' => 'required|string|min:4|max:255|unique:users', 
      'gender' => 'required', 
      'city' => 'sometimes|string|max:255', 
      'province' => 'sometimes|string|max:255', 
      'country' => 'sometimes|string|max:255', 
      'phone' => 'sometimes|string|max:255', 
      'email' => 'required|string|email|max:255|unique:users', 
      'password' => 'required|string|min:6|confirmed', 
     ]); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 
     return User::create([ 
      'fname' => $data['fname'], 
      'lname' => $data['lname'], 
      'username' => $data['username'], 
      'gender' => $data['gender'], 
      'city' => $data['city'], 
      'province' => $data['province'], 
      'country' => $data['country'], 
      'phone' => $data['phone'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 
} 

謝謝。

回答

1

您是否使用php artisan make:auth來設置您的身份驗證?

我已經添加了以下到應用程序\ HTTP \ \控制器驗證\ RegisterController.php來分配所有用戶的用戶

protected function create(array $data) 
{ 
    $role = Role::where('name', 'user')->first(); 

    $user = User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 

    $user->assignRole($role); 

    return $user; 
} 

的user.php的

默認角色和以下
public function roles() 
{ 
    return $this->belongsToMany(Role::class); 
} 

public function assignRole(Role $role) 
{ 
    return $this->roles()->save($role); 
} 
+0

如果角色已經存在,應該不是被'attach'呢? – Isac

0

這裏是你如何能以簡單的方式做到這一點..

首先,你必須有一個像

的請求0
// $request->id (integer) 
// $request->fname (string) 
// $request->lname (string) 
// $request->roles (array)(assuming user and role have many to many relation) 

等..給出的投入,這裏的功能

protected function roleValidator(array $data) 
{ 
    return Validator::make($data, [ 
     'roles' => 'required|array|min:1', 
    ]); 
} 

public function editUser(Request $request) 
{ 
    // FIRST VALIDATE INPUT ROLES 
    $roles = $request->only('roles'); 
    // CHECK IF HAVE ATLEAST ONE HAS BEEN SELECTED 
    $roleValidate = $this->roleValidator($roles); 
    if (!$roleValidate->fails()) 
    { 
     $request->roles = array_unique($request->roles); 
     $roles = Role::orderBy('id','asc')->get(['id']); 
     $roleList = array(); 
     foreach($roles as $role) { array_push($roleList,$role->id); } 
     // CHECK IF ALL INPUTS ARE VALID ROLES IN THE DB 
     if(count(array_intersect($request->roles, $roleList)) == count($request->roles)) 
     { 
      // VALIDATE YOUR PROFILE 
      ..... 
      $user = User::find($request->userID); 
      $user->fname = $request->fname; 
      $user->lname= $request->fname; 
      $user->roles()->sync($request->roles); 
      $user->save(); 
     } 
     else 
     { 
      // INVALID ROLE DETECTED! 
     } 
    } 
    else 
    { 
     // SHOW $roleValidate->errors()->all() 
    } 
}