2015-06-08 69 views
1

我只想給新註冊的用戶分配一個角色。我如何在Entrust的Laravel 5中實現這一點?我正在使用Entrust來獲取角色和權限。如何在委託中分配默認用戶角色?

上次我嘗試在用戶註冊供應商文件夾中的文件後觸發事件。有沒有辦法在不修改供應商文件夾內的任何內容的情況下觸發角色分配事件?

如果是,那麼我應該在哪裏發生事件?我不想修改供應商文件夾內的任何內容,例如postRegister()中的觸發事件AuthenticatesAndRegistersUsers.php,因爲新更新會覆蓋我的代碼。

此鏈接上的代碼看起來不錯,但我不知道委託是否有註冊事件。 http://laravel.io/forum/07-02-2014-entrust-assign-role-on-user-signup

這裏是我的代碼在routes.php文件:

// this event is firing on user login and i am getting user object 
Event::listen('auth.login', function($user) { 
    var_dump($user); 
    die(__LINE__); 
}); 

// this event is not firing on user registration 
Event::listen('auth.register', function($user) { 
    var_dump($user); 
    die(__LINE__); 
    // $donor_role = DB::table('app_roles')->where('name', '=', 'donor')->pluck('id'); 
    // $user->roles()->attach($donor_role); 
    // return false; 
}); 

請幫助我。

回答

1

我想通了全部由我自己。這是我如何實現:

我複製的postRegister從/vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndRegistersUsers.php()函數和覆蓋/應用/ HTTP /控制器/認證/ AuthController.php進行了一些修改。

這裏是AuthController.php修改的功能:

public function postRegister(Request $request) { 
    $validator = $this->registrar->validator($request->all()); 
    if ($validator->fails()) { 
     $this->throwValidationException(
       $request, $validator 
     ); 
    } 
    $this->auth->login($this->registrar->create($request->all())); 
    // little modification :-) 
    \Event::fire('auth.assign_default_role', $this->auth->user()); 
    return redirect($this->redirectPath()); 
} 

這裏是在routes.php文件的事件監聽器:

Event::listen('auth.assign_default_role', function($user) { 
    $donor_role = DB::table('app_roles')->where('name', '=', 'donor')- >pluck('id'); 
    $user->roles()->attach($donor_role); 
    return false; 
}); 
+0

您的解決方案給我'調用一個成員函數的角色( )在'routes.php'上的null上 –

0

您可以從正在處理實際註冊的控制器中觸發註冊事件。

Event::fire('auth.register', array($user)); 
3

應用程序\服務\ Registrar.php 這是我的方式:

public function create(array $data) 
    { 
     $create = User::create([ 
      'username' => $data['username'], 
      'email' => $data['email'], 
      'password' => $data['password'], 
     ]); 


     $user = User::find($create->id); 

     $role = Role::where('name', '=', 'user')->firstOrFail(); 

     $user->roles()->attach($role->id); 

     return $create; 
    } 
相關問題