Ларавел 5 и Доверяй. Как сохранить пользователя и добавить роль одновременно

Кто-нибудь пробовал Entrust для пользовательских ролей & Разрешения в Laravel 5?

Я хочу добавить и сохранить пользователя и добавить в него роль одновременно. вот мой код

     $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.

4

Решение

Я думаю, что у вас есть эта проблема, потому что вы никогда не сохраняете в БД.
Попробуйте что-то вроде этого.

 $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. Если вы используете что-то вроде uuids для уникальной идентификации ваших полей, вы должны также включить public $incrementing = false; внутри вашей модели.

Убедитесь, что вы включили черту HasRole в вашу модель.

Также взгляните на ответ Акаруна, так как он также будет работать. Метод create, create это новый экземпляр, а также сохранение в БД, поэтому вам не нужно $user->save()

3

Другие решения

Я также использую «Entrust» для управления моими правами пользователей, но я использую create синтаксис для хранения моего пользователя. Затем я использую «role () -> attach», вот так:

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

Я использую предоставленную настройку Auth, которая поставляется с Laravel 5 с моими собственными настройками, поэтому я просто делаю следующее в 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 в верхней части файла. Прекрасно работает для меня.

0
По вопросам рекламы [email protected]