Я использую User
и Role
вместо Karyawan
и Jabatan
соответственно (извините за это).User
и Role
имеет отношение Many-to-Many
, поскольку один User
может иметь несколько Roles
и наоборот.
роли Таблица
+----+------+-----------+
| id | role | timeStamps|
+----+------+-----------+
role_user Сводная таблица
+----+---------+---------+
| id | user_id | role_id |
+----+---------+---------+
Ролевая модель
public function users(){
return $this->belongsToMany('App\User');
}
Модель пользователя
public function roles(){
return $this->belongsToMany('App\Role');
}
RoleUser Pivot
namespace App;
use Illuminate\Database\Eloquent\Relations\Pivot;
class RoleUser extends Pivot
{
protected $table='role_user';
protected $fillable = [
'user_id','role_id'
];
public static $role_attach_rules = [
'roles' => 'required|array|min:1|exists:roles,id'
];
public function user(){
return $this->hasOne('App\User', 'id', 'user_id');
}
public function role(){
return $this->hasOne('App\Role', 'id', 'user_id');
}
}
Код контроллера для назначения ролей пользователю
Здесь вы поймете методы по их именам.
public function getAssignRole(){
$users = User::all();
$roles=Role::all();
return View::make('assignrole', compact('users', 'roles'));
}
public function postAssignRole(Request $request){
$attachvalidator = Validator::make($request->all(),RoleUser::$role_attach_rules);
if ($attachvalidator->fails()){
return Redirect::back()->withErrors($attachvalidator)->withInput();
}
$user=$request->get('user');
$role=$request->get('roles');
$attach = User::find($user)->roles()->attach($role);
return 'Success';
}
public function detachRole(Request $request){
$user=$request->get('user_update');
$role=$request->get('roles_update');
$attach = User::find($user)->roles()->detach($role);
return 'detach Success';
}
Просмотреть файл (assignrole.blade.php) для назначения ролей
//This form is for assigning roles
<form method="post" action="{{route('role.assignrole.post')}}">
{{csrf_field()}}
<select id="user" name="user" class="select_with_style" required>
@foreach($users as $user)
<option value="{{$user['id']}}">{{$user['name']}}</option>
@endforeach
</select>
<select id="roles" name="roles[]" class="select_with_style" multiple="" required>
@foreach($roles as $role)
<option value="{{$role['id']}}">{{$role['role']}}</option>
@endforeach
</select>
<br>
<input type="submit" name="submit" class="submit action-button" value="Submit"/>
</form>
//This is for detaching roles from user
<form method="post" action="{{route('role.detach')}}">
{{csrf_field()}}
<select id="user_update" name="user_update" class="select_with_style" required>
@foreach($users as $user)
<option value="{{$user['id']}}">{{$user['name']}}</option>
@endforeach
</select>
<select id="roles_update" name="roles_update[]" class="select_with_style" multiple="" required>
@foreach($roles as $role)
<option value="{{$role['id']}}">{{$role['role']}}</option>
@endforeach
</select>
<br>
<input type="submit" name="submit" class="submit action-button" value="Update"/>
</form>
Маршруты
Route::get('role/assignrole', array('as' => 'role.assignrole', 'uses' => 'YourController@getAssignRole'));
Route::post('role/assignrole', array('as' => 'role.assignrole.post', 'uses' => 'YourController@postAssignrole'));
Route::post('role/detach', array('as' => 'role.detach', 'uses' => 'YourController@detachRole'));
Надеюсь, это поможет.
Редактировать
Вы можете использовать Voyager вместо выполнения этой большой работы.Это очень легко понять и хорошо структурировать, и я думаю, вам понравится.