/** * @param $id * @param $input * @param $roles * @throws GeneralException * @return bool */ public function update($id, $input, $roles) { $permission = $this->findOrThrowException($id); $permission->name = $input['name']; $permission->display_name = $input['display_name']; $permission->system = isset($input['system']) ? 1 : 0; $permission->group_id = isset($input['group']) && strlen($input['group']) > 0 ? (int) $input['group'] : null; $permission->sort = isset($input['sort']) ? (int) $input['sort'] : 0; 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->findOrThrowException($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]); } } } //Add the dependencies of this permission if any if (isset($input['dependencies']) && count($input['dependencies'])) { //Remove all current dependencies $this->dependencies->clear($permission->id); //Add the currently checked dependencies foreach ($input['dependencies'] as $dependency_id) { $this->dependencies->create($permission->id, $dependency_id); } } else { $this->dependencies->clear($permission->id); } return true; } throw new GeneralException(trans('exceptions.backend.access.permissions.update_error')); }
/** * @param $id * @param PermissionGroupRepositoryContract $group * @param EditRoleRequest $request * @return mixed */ public function edit($id, PermissionGroupRepositoryContract $group, EditRoleRequest $request) { $role = $this->roles->findOrThrowException($id, true); return view('backend.access.roles.edit')->withRole($role)->withRolePermissions($role->permissions->lists('id')->all())->withGroups($group->getAllGroups())->withPermissions($this->permissions->getUngroupedPermissions()); }