В статье Исправление ручного закрытия проблем в Zabbix 3.4 я уже описывал, как дать права на ручное закрытие проблем пользователям, не имеющим прав редактирования узла. Похожая ситуация возникла и с редактированием периодов обслуживания. Для того, чтобы предоставить пользователю права редактировать периоды обслуживания, нужно дать ему права на редактирование самого узла. Пользователь, имеющий доступ к редактированию узла в Zabbix, может злоупотребить своими правами и просто снять с контроля узел на время его обслуживания. Ещё хуже, если этот пользователь по окончании обслуживания забудет вернуть узел на контроль.
Чтобы избежать подобных злоупотреблений, может быть лучше выдать права создавать и редактировать периоды обслуживания всем пользователям, имеющим права на просмотр соответствующей группы узлов. Именно такое изменение внёс в исходный код веб-интерфейса Zabbix мой коллега Кирилл. Изменил он два файла: frontends/php/include/classes/api/services/CMaintenance.php и frontends/php/maintenance.php. Первый файл исправляет права доступа в методах API maintenance, причём права удалять периоды обслуживания при помощи метода delete пользователю, не имеющему доступа к группе узлов, не предоставляется. Второй файл исправляет права доступа к периодам обслуживания непосредственно через сам веб-интерфейс Zabbix. Получившаяся заплатка выглядит следующим образом:
Index: zabbix-3.4.12-1+buster/frontends/php/include/classes/api/services/CMaintenance.php
===================================================================
--- zabbix-3.4.12-1+buster.orig/frontends/php/include/classes/api/services/CMaintenance.php
+++ zabbix-3.4.12-1+buster/frontends/php/include/classes/api/services/CMaintenance.php
@@ -276,7 +276,6 @@ class CMaintenance extends CApiService {
// hosts permissions
$options = [
'hostids' => $hostids,
- 'editable' => true,
'output' => ['hostid'],
'preservekeys' => true
];
@@ -289,7 +288,6 @@ class CMaintenance extends CApiService {
// groups permissions
$options = [
'groupids' => $groupids,
- 'editable' => true,
'output' => ['groupid'],
'preservekeys' => true
];
@@ -458,7 +456,6 @@ class CMaintenance extends CApiService {
'selectGroups' => ['groupid'],
'selectHosts' => ['hostid'],
'selectTimeperiods' => API_OUTPUT_EXTEND,
- 'editable' => true,
'preservekeys' => true
]);
@@ -580,7 +577,6 @@ class CMaintenance extends CApiService {
$db_hosts = API::Host()->get([
'output' => [],
'hostids' => $hostids,
- 'editable' => true,
'preservekeys' => true
]);
@@ -598,7 +594,6 @@ class CMaintenance extends CApiService {
$db_groups = API::HostGroup()->get([
'output' => [],
'groupids' => $groupids,
- 'editable' => true,
'preservekeys' => true
]);
Index: zabbix-3.4.12-1+buster/frontends/php/maintenance.php
===================================================================
--- zabbix-3.4.12-1+buster.orig/frontends/php/maintenance.php
+++ zabbix-3.4.12-1+buster/frontends/php/maintenance.php
@@ -105,7 +105,6 @@ if (isset($_REQUEST['maintenanceid'])) {
$dbMaintenance = API::Maintenance()->get([
'output' => API_OUTPUT_EXTEND,
'selectTimeperiods' => API_OUTPUT_EXTEND,
- 'editable' => true,
'maintenanceids' => getRequest('maintenanceid'),
]);
if (empty($dbMaintenance)) {
@@ -412,7 +411,6 @@ if (!empty($data['form'])) {
'maintenanceids' => $data['maintenanceid'],
'real_hosts' => true,
'output' => ['hostid'],
- 'editable' => true
]);
$data['hostids'] = zbx_objectValues($data['hostids'], 'hostid');
@@ -458,7 +456,6 @@ if (!empty($data['form'])) {
// get groups
$data['all_groups'] = API::HostGroup()->get([
- 'editable' => true,
'output' => ['groupid', 'name'],
'real_hosts' => true,
'preservekeys' => true
@@ -475,7 +472,6 @@ if (!empty($data['form'])) {
$data['hosts'] = API::Host()->get([
'output' => ['hostid', 'name'],
'real_hosts' => true,
- 'editable' => true,
'groupids' => $data['twb_groupid']
]);
@@ -483,7 +479,6 @@ if (!empty($data['form'])) {
$hostsSelected = API::Host()->get([
'output' => ['hostid', 'name'],
'real_hosts' => true,
- 'editable' => true,
'hostids' => $data['hostids']
]);
$data['hosts'] = array_merge($data['hosts'], $hostsSelected);
@@ -532,7 +527,6 @@ else {
'search' => [
'name' => ($filter['name'] === '') ? null : $filter['name']
],
- 'editable' => true,
'sortfield' => $sortField,
'sortorder' => $sortOrder,
'limit' => $config['search_limit'] + 1
Эту заплатку можно взять по ссылке zabbix3_4_12_permit_edit_maintenances.patch.