diff --git a/server/SHServ/Controllers/AreasRESTAPIController.php b/server/SHServ/Controllers/AreasRESTAPIController.php index 161be7b..8d8536c 100644 --- a/server/SHServ/Controllers/AreasRESTAPIController.php +++ b/server/SHServ/Controllers/AreasRESTAPIController.php @@ -5,18 +5,21 @@ use \SHServ\Models\Areas; use \SHServ\Entities\Area; use \SHServ\Middleware\ControlScripts; +use \SHServ\Integrations\GAuth\AuthControllerTrait; /** * Контроллер реализующий REST API для работы с абстрактным описанием физических областей. * Подчёркиваю, это Areas, а не Spaces. Реализована логика работы именно с физическим областями, а не абстрактным пространством. */ class AreasRESTAPIController extends \SHServ\Middleware\Controller { + use AuthControllerTrait; /** * Получить список пространств в системе. Всех или у родительского пространства * @param Int $area_id Area ID * @return String JSON. Вернёт массив областей в поле `areas` и количество в поле `total` */ public function areas_list($area_id = 0) { + if ($auth = $this -> require_permission('areas.view')) { return $auth; } $areas_model = new Areas(); if(!$area_id) { @@ -50,6 +53,7 @@ * @return String JSON. Возвращает поля созданной `area` и `alias` или ошибку. */ public function new_area($type, $alias, $display_name) { + if ($auth = $this -> require_permission('areas.manage')) { return $auth; } $areas_model = new Areas(); if(!preg_match('/^[a-z0-9_]+$/', $alias) || strlen($alias) > 255) { @@ -86,6 +90,7 @@ * @return String JSON. Вернёт ошибку или положительный результат */ public function remove_area($area_id) { + if ($auth = $this -> require_permission('areas.manage')) { return $auth; } if($area_id != intval($area_id) or intval($area_id) < 1) { return $this -> utils() -> response_error("invalid_id", ["area_id"]); } @@ -110,6 +115,7 @@ * @return String JSON. Вернёт ошибку или положительный результат */ public function place_in_area($target_id, $place_in_area_id) { + if ($auth = $this -> require_permission('areas.manage')) { return $auth; } if ($error = $this -> validate_positive_int_ids([ 'target_id' => $target_id, 'place_in_area_id' => $place_in_area_id, @@ -138,6 +144,7 @@ * @return String JSON. Возвращает поля `area` с данными об изменённой области и `alias`. */ public function update_display_name($area_id, $display_name) { + if ($auth = $this -> require_permission('areas.manage')) { return $auth; } if($area_id != intval($area_id) or intval($area_id) < 1) { return $this -> utils() -> response_error("invalid_id"); } @@ -170,6 +177,7 @@ * @return String JSON. Возвращает поля `area` с данными об изменённой области и `alias`. */ public function update_alias($area_id, $new_alias) { + if ($auth = $this -> require_permission('areas.manage')) { return $auth; } if($area_id != intval($area_id) or intval($area_id) < 1) { return $this -> utils() -> response_error("invalid_id", ["area_id"]); } @@ -207,6 +215,7 @@ * и `results` - ассоциативный массив с ключами вида `area_alias:device_alias` и телом ответа от устройства в качестве значения. */ public function reboot_devices($area_id = 0) { + if ($auth = $this -> require_permission('devices.control')) { return $auth; } $area = new Area(intval($area_id)); if(!$area) { @@ -232,6 +241,7 @@ * @return String JSON. Возвращает массив устройств в поле `devices` и количество устрйоств в поле `total` */ public function devices_list($area_id) { + if ($auth = $this -> require_permission('devices.view')) { return $auth; } if($area_id != intval($area_id) or intval($area_id) < 1) { return $this -> utils() -> response_error("invalid_id", ["area_id"]); } @@ -258,6 +268,7 @@ * @return String JSON. Массив скриптов в поле `scripts` и количество скриптов в поле `total` */ public function scripts_list($area_id) { + if ($auth = $this -> require_permission('scripts.view')) { return $auth; } if($area_id != intval($area_id) or intval($area_id) < 1) { return $this -> utils() -> response_error("invalid_id", ["area_id"]); } @@ -297,6 +308,7 @@ * @return String JSON. Вернётся ошибка или положительный ответ. */ public function unassign_from_area($target_id) { + if ($auth = $this -> require_permission('areas.manage')) { return $auth; } if($target_id != intval($target_id) or intval($target_id) < 1) { return $this -> utils() -> response_error("invalid_id", ["target_id"]); } @@ -318,6 +330,7 @@ * @return String JSON Вернёт поле `types` с массивом типов */ public function exists_types() { + if ($auth = $this -> require_permission('areas.view')) { return $auth; } return $this -> utils() -> response_success([ "types" => (new Areas()) -> get_exists_types() ]); diff --git a/server/SHServ/Controllers/FirmwareRESTAPIController.php b/server/SHServ/Controllers/FirmwareRESTAPIController.php index ad39dfd..7aae2a5 100644 --- a/server/SHServ/Controllers/FirmwareRESTAPIController.php +++ b/server/SHServ/Controllers/FirmwareRESTAPIController.php @@ -4,10 +4,13 @@ use SHServ\Models\Devices; use SHServ\Tools\FirmwareCatalog; +use SHServ\Integrations\GAuth\AuthControllerTrait; class FirmwareRESTAPIController extends \SHServ\Middleware\Controller { + use AuthControllerTrait; public function firmwares_list() { + if ($auth = $this -> require_permission('firmware.view')) { return $auth; } $catalog = new FirmwareCatalog(); $all = $catalog->getAll(); @@ -22,6 +25,7 @@ } public function firmware_detail($firmware_id) { + if ($auth = $this -> require_permission('firmware.view')) { return $auth; } $catalog = new FirmwareCatalog(); $entry = $catalog->getById($firmware_id); @@ -35,6 +39,7 @@ } public function firmware_download($firmware_id) { + if ($auth = $this -> require_permission('firmware.view')) { return $auth; } $catalog = new FirmwareCatalog(); $binPath = $catalog->getBinPath($firmware_id); @@ -60,6 +65,7 @@ } public function firmware_refresh() { + if ($auth = $this -> require_permission('firmware.upload')) { return $auth; } $catalog = new FirmwareCatalog(); $catalog->scan(); @@ -67,6 +73,7 @@ } public function device_firmware_compatibility($device_id) { + if ($auth = $this -> require_permission('firmware.view')) { return $auth; } $device_id = intval($device_id); if ($device_id < 1) { return $this->utils()->response_error('invalid_id', ['device_id']); @@ -96,6 +103,7 @@ } public function device_update_firmware($device_id, $firmware_id) { + if ($auth = $this -> require_permission('firmware.upload')) { return $auth; } $device_id = intval($device_id); if ($device_id < 1) { return $this->utils()->response_error('invalid_id', ['device_id']); diff --git a/server/SHServ/Controllers/ScriptsRESTAPIController.php b/server/SHServ/Controllers/ScriptsRESTAPIController.php index c9c9dbb..87fea15 100644 --- a/server/SHServ/Controllers/ScriptsRESTAPIController.php +++ b/server/SHServ/Controllers/ScriptsRESTAPIController.php @@ -14,9 +14,12 @@ use \SHServ\Models\Scripts; use \SHServ\Entities\Script; use \SHServ\Entities\Area; +use \SHServ\Integrations\GAuth\AuthControllerTrait; class ScriptsRESTAPIController extends \SHServ\Middleware\Controller { + use AuthControllerTrait; public function run_action_script($alias, $params) { + if ($auth = $this -> require_permission('scripts.run')) { return $auth; } if(is_string($params)) { $decoded = json_decode($params, true); if(json_last_error() !== JSON_ERROR_NONE) { @@ -45,6 +48,7 @@ } public function actions_scripts_list() { + if ($auth = $this -> require_permission('scripts.view')) { return $auth; } $data = (new Scripts()) -> actions_scripts_list(); return $this -> utils() -> response_success([ @@ -54,6 +58,7 @@ } public function regular_scripts_list() { + if ($auth = $this -> require_permission('scripts.view')) { return $auth; } $data = (new Scripts()) -> regular_scripts_list(); return $this -> utils() -> response_success([ @@ -63,6 +68,7 @@ } public function scope_list() { + if ($auth = $this -> require_permission('scripts.view')) { return $auth; } $scripts_model = new Scripts(); $scopes = $scripts_model -> get_scopes_list(); @@ -73,6 +79,7 @@ } public function scope_file($name) { + if ($auth = $this -> require_permission('scripts.view')) { return $auth; } $scripts_model = new Scripts(); $scopes = $scripts_model -> get_scopes_list(); @@ -95,12 +102,14 @@ } public function scope_remove($name) { + if ($auth = $this -> require_permission('scripts.edit')) { return $auth; } return (new Scripts()) -> remove_scope($name) ? $this -> utils() -> response_success() : $this -> utils() -> response_error("undefined_error"); } protected function set_script_state(String $type, String $uniq_name, String $state) { + if ($auth = $this -> require_permission('scripts.edit')) { return $auth; } if(!in_array($state, ["enable", "disable"], true)) { return $this -> utils() -> response_error("invalid_state", ["state"]); } @@ -129,6 +138,7 @@ } public function place_in_area($target_id, $place_in_area_id) { + if ($auth = $this -> require_permission('scripts.edit')) { return $auth; } if($target_id != intval($target_id) or intval($target_id) < 1) { return $this -> utils() -> response_error("invalid_id", ["target_id"]); } @@ -156,6 +166,7 @@ } public function unassign_from_area($target_id) { + if ($auth = $this -> require_permission('scripts.edit')) { return $auth; } if($target_id != intval($target_id) or intval($target_id) < 1) { return $this -> utils() -> response_error("invalid_id", ["target_id"]); }