Кто-нибудь пробовал 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.
Я думаю, что у вас есть эта проблема, потому что вы никогда не сохраняете в БД.
Попробуйте что-то вроде этого.
$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()
Я также использую «Entrust» для управления моими правами пользователей, но я использую create
синтаксис для хранения моего пользователя. Затем я использую «role () -> attach», вот так:
$user = User::create($this->userInputs($request));
$user->roles()->attach($request->input('role'));
Я использую предоставленную настройку 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 в верхней части файла. Прекрасно работает для меня.