/**
  * @param  $id
  * @param  $input
  * @param  $roles
  * @throws GeneralException
  * @return bool
  */
 public function update($id, $input, $roles)
 {
     $permission = $this->find($id);
     $permission->permission_name = $input['permission_name'];
     $permission->permission_slug = $input['permission_slug'];
     $permission->permission_description = $input['permission_description'];
     if ($permission->save()) {
         //Detach permission from every role, then add the permission to the selected roles
         $currentRoles = $this->roles->getAllRoles();
         foreach ($currentRoles as $role) {
             $role->detachPermission($permission);
         }
         if (count($roles['permission_roles']) > 0) {
             //For each role, load role, collect perms, add perm to perms, flush perms, read perms
             foreach ($roles['permission_roles'] as $role_id) {
                 //Get the role, with permissions
                 $role = $this->roles->find($role_id, true);
                 //Get the roles permissions into an array
                 $role_permissions = $role->permissions->lists('id')->all();
                 if (count($role_permissions) >= 1) {
                     //Role has permissions, gather them first
                     //Add this new permission id to the role
                     array_push($role_permissions, $permission->id);
                     //For some reason the lists() casts as a string, convert all to int
                     $role_permissions_temp = array();
                     foreach ($role_permissions as $rp) {
                         array_push($role_permissions_temp, (int) $rp);
                     }
                     $role_permissions = $role_permissions_temp;
                     //Sync the permissions to the role
                     $role->permissions()->sync($role_permissions);
                 } else {
                     //Role has no permissions, add the 1
                     $role->permissions()->sync([$permission->id]);
                 }
             }
         }
         return true;
     }
     throw new GeneralException('There was a problem updating this permission. Please try again.');
 }
 /**
  * Show the form for editing the specified resource.
  *
  * @param  int $id
  * @return \Illuminate\Http\Response
  */
 public function edit($id)
 {
     $permission = $this->permissions->find($id, true);
     return view('backend.permission.edit', ['permission' => $permission, 'roles' => $this->roles->getAllRoles(), 'permissionRoles' => $permission->roles->lists('id')->all()]);
 }
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function destroy($id)
 {
     $this->roles->destroy($id);
     return redirect()->route('admin.auth.role.index')->withSuccess(trans('alerts.users.deleted'));
 }
 /**
  * Show the form for editing the specified resource.
  *
  * @param  int $id
  * @return \Illuminate\View\View
  */
 public function edit($id)
 {
     $user = $this->users->find($id);
     return view('backend.user.edit', ['user' => $user, 'userRoles' => $user->roles->lists('id')->all(), 'roles' => $this->roles->getAllRoles('id', 'desc', true)]);
 }