2015-06-08 2 views
1

Я просто хочу назначить роль вновь зарегистрированному пользователю. Как я могу достичь этого в Laravel 5 с Entrust? Я использую 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/Контроллеры/Auth/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

Ваше решение дало мне 'вызов функции члена ролей () на null' на 'routes.php' –

0

Вы можете запустить событие регистрации с вашего контроллера, где обрабатывается фактическая регистрация.

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

App \ Сервис \ 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; 
    } 
Смежные вопросы