App\Repositories\Backend\Access\Role\RoleRepository::update PHP Method

update() public method

public update ( Model $role, array $input ) : boolean
$role Illuminate\Database\Eloquent\Model
$input array
return boolean
    public function update(Model $role, array $input)
    {
        //See if the role has all access, administrator always has all access
        if ($role->id == 1) {
            $all = true;
        } else {
            $all = $input['associated-permissions'] == 'all' ? true : false;
        }
        if (!isset($input['permissions'])) {
            $input['permissions'] = [];
        }
        //This config is only required if all is false
        if (!$all) {
            //See if the role must contain a permission as per config
            if (config('access.roles.role_must_contain_permission') && count($input['permissions']) == 0) {
                throw new GeneralException(trans('exceptions.backend.access.roles.needs_permission'));
            }
        }
        $role->name = $input['name'];
        $role->sort = isset($input['sort']) && strlen($input['sort']) > 0 && is_numeric($input['sort']) ? (int) $input['sort'] : 0;
        //See if this role has all permissions and set the flag on the role
        $role->all = $all;
        DB::transaction(function () use($role, $input, $all) {
            if (parent::save($role)) {
                //If role has all access detach all permissions because they're not needed
                if ($all) {
                    $role->permissions()->sync([]);
                } else {
                    //Remove all roles first
                    $role->permissions()->sync([]);
                    //Attach permissions if the role does not have all access
                    $permissions = [];
                    if (is_array($input['permissions']) && count($input['permissions'])) {
                        foreach ($input['permissions'] as $perm) {
                            if (is_numeric($perm)) {
                                array_push($permissions, $perm);
                            }
                        }
                    }
                    $role->attachPermissions($permissions);
                }
                event(new RoleUpdated($role));
                return true;
            }
            throw new GeneralException(trans('exceptions.backend.access.roles.update_error'));
        });
    }

Usage Example

 /**
  * @param  Role $role
  * @param  UpdateRoleRequest $request
  * @return mixed
  */
 public function update(Role $role, UpdateRoleRequest $request)
 {
     $this->roles->update($role, $request->all());
     return redirect()->route('admin.access.role.index')->withFlashSuccess(trans('alerts.backend.roles.updated'));
 }