From 2908f09b01904498239e5a891f881555cdebaa81 Mon Sep 17 00:00:00 2001 From: Vanessa Gil Date: Mon, 26 Jan 2015 13:50:58 +0100 Subject: [PATCH] Added strict ACL to agent detail view. --- pandora_console/include/functions_groups.php | 2 + .../include/functions_reporting.php | 26 ++++- pandora_console/include/functions_tags.php | 76 ++++++++++--- .../operation/agentes/estado_agente.php | 107 ++++++++++++------ 4 files changed, 159 insertions(+), 52 deletions(-) diff --git a/pandora_console/include/functions_groups.php b/pandora_console/include/functions_groups.php index c40cde6919..7c01f64190 100644 --- a/pandora_console/include/functions_groups.php +++ b/pandora_console/include/functions_groups.php @@ -1893,6 +1893,8 @@ function group_get_data ($id_user = false, $user_strict = false, $acltags, $retu } } + $list = array(); + if ($list_groups == false) { $list_groups = array(); } diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 8d58420a16..a70d2f8370 100644 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -7778,7 +7778,9 @@ function reporting_get_count_events_validated ($filter, $period = 0, * * @return string html formatted tiny stats of modules/alerts of an agent */ -function reporting_tiny_stats ($counts_info, $return = false, $type = 'agent', $separator = ':') { +function reporting_tiny_stats ($counts_info, $return = false, $type = 'agent', $separator = ':', $strict_user = false) { + global $config; + $out = ''; // Depend the type of object, the stats will refer agents, modules... @@ -7809,6 +7811,28 @@ function reporting_tiny_stats ($counts_info, $return = false, $type = 'agent', $ break; } + if ($strict_user && $type == 'agent') { + + $acltags = tags_get_user_module_and_tags ($config['id_user'],'AR', $strict_user); + $filter['disabled'] = 0; + $id_agent = $counts_info['id_agente']; + + $counts_info = array(); + $counts_info['normal_count'] = count(tags_get_agent_modules ($id_agent, $acltags, false, $filter, false, AGENT_MODULE_STATUS_NORMAL)); + $counts_info['warning_count'] = count(tags_get_agent_modules ($id_agent, $acltags, false, $filter, false, AGENT_MODULE_STATUS_WARNING)); + $counts_info['critical_count'] = count(tags_get_agent_modules ($id_agent, $acltags, false, $filter, false, AGENT_MODULE_STATUS_CRITICAL_BAD)); + $counts_info['notinit_count'] = count(tags_get_agent_modules ($id_agent, $acltags, false, $filter, false, AGENT_MODULE_STATUS_NOT_INIT)); + $counts_info['unknown_count'] = count(tags_get_agent_modules ($id_agent, $acltags, false, $filter, false, AGENT_MODULE_STATUS_UNKNOWN)); + $counts_info['total_count'] = $counts_info['normal_count'] + $counts_info['warning_count'] + $counts_info['critical_count'] + $counts_info['unknown_count'] + $counts_info['notinit_count']; + + $all_agent_modules = tags_get_agent_modules ($id_agent, $acltags, false, $filter); + $mod_clause = "(".implode(',', array_keys($all_agent_modules)).")"; + + $counts_info['fired_count'] = db_get_sql ("SELECT COUNT(times_fired) + FROM talert_template_modules + WHERE times_fired != 0 AND id_agent_module IN ".$mod_clause); + } + // Store the counts in a data structure to print hidden divs with titles $stats = array(); diff --git a/pandora_console/include/functions_tags.php b/pandora_console/include/functions_tags.php index 1a902cbc83..d8083344ee 100644 --- a/pandora_console/include/functions_tags.php +++ b/pandora_console/include/functions_tags.php @@ -1850,8 +1850,33 @@ function tags_get_all_user_agents ($id_tag = false, $id_user = false, $groups_an } } + $disabled_sql = ''; + if (!empty($filter['disabled'])) { + $disabled_sql = " AND disabled = ".$filter['disabled']; + } + + $order_by_condition = ''; + if (!empty($filter['order'])) { + $order_by_condition = " ORDER BY ".$filter['order']; + } else { + $order_by_condition = " ORDER BY tagente.nombre ASC"; + } + $limit_sql = ''; + if (isset($filter['offset'])) { + $offset = $filter['offset']; + } + if (isset($filter['limit'])) { + $limit = $filter['limit']; + } + + if (isset($offset) && isset($limit)) { + $limit_sql = " LIMIT $offset, $limit "; + } + if (!empty($filter['group_by'])) { $group_by = " GROUP BY ".$filter['group_by']; + } else { + $group_by = " GROUP BY tagente.nombre"; } $id_agent_search = ''; @@ -1874,6 +1899,16 @@ function tags_get_all_user_agents ($id_tag = false, $id_user = false, $groups_an } } + //~ $user_agents_sql = "SELECT ".$select_fields ." + //~ FROM tagente, tagente_modulo, ttag_module + //~ WHERE tagente.id_agente = tagente_modulo.id_agente + //~ AND tagente_modulo.id_agente_modulo = ttag_module.id_agente_modulo + //~ ". $tag_filter . + //~ $groups_clause . $search_sql . $void_agents . + //~ $status_sql . + //~ $group_by . + //~ " ORDER BY tagente.nombre ASC"; + $user_agents_sql = "SELECT ".$select_fields ." FROM tagente, tagente_modulo, ttag_module WHERE tagente.id_agente = tagente_modulo.id_agente @@ -1881,10 +1916,11 @@ function tags_get_all_user_agents ($id_tag = false, $id_user = false, $groups_an ". $tag_filter . $groups_clause . $search_sql . $void_agents . $status_sql . + $disabled_sql . $group_by . - " ORDER BY tagente.nombre ASC"; + $order_by_condition . + $limit_sql; - //return db_get_sql ($user_agents); $user_agents = db_get_all_rows_sql($user_agents_sql); if ($user_agents == false) { @@ -1904,7 +1940,7 @@ function tags_get_all_user_agents ($id_tag = false, $id_user = false, $groups_an return $user_agents; } -function tags_get_agent_modules ($id_agent, $groups_and_tags = array(), $fields = false, $filter = false, $return_all_fields = false) { +function tags_get_agent_modules ($id_agent, $groups_and_tags = array(), $fields = false, $filter = false, $return_all_fields = false, $get_filter_status = -1) { global $config; @@ -1914,18 +1950,18 @@ function tags_get_agent_modules ($id_agent, $groups_and_tags = array(), $fields if (!is_array ($fields)) { $fields = array (); - $fields[0] = "id_agente_modulo"; - $fields[1] = "nombre"; + $fields[0] = "tagente_modulo.id_agente_modulo"; + $fields[1] = "tagente_modulo.nombre"; } $select_fields = implode(',',$fields); if ($filter) { $filter_sql = ''; if (isset($filter['disabled'])) { - $filter_sql .= " AND disabled = ".$filter['disabled']; + $filter_sql .= " AND tagente_modulo.disabled = ".$filter['disabled']; } if (isset($filter['nombre'])) { - $filter_sql .= ' AND nombre LIKE "' .$filter['nombre'].'"'; + $filter_sql .= ' AND tagente_modulo.nombre LIKE "' .$filter['nombre'].'"'; } } @@ -1935,16 +1971,28 @@ function tags_get_agent_modules ($id_agent, $groups_and_tags = array(), $fields $agent_group = db_get_value('id_grupo', 'tagente', 'id_agente', $id_agent); if (isset($groups_and_tags[$agent_group]) && ($groups_and_tags[$agent_group] != '')) { //~ $tag_filter = " AND ttag_module.id_tag IN (".$groups_and_tags[$agent_group].")"; - $tag_filter = " AND id_agente_modulo IN (SELECT id_agente_modulo FROM ttag_module WHERE id_tag IN (".$groups_and_tags[$agent_group]."))"; + $tag_filter = " AND tagente_modulo.id_agente_modulo IN (SELECT id_agente_modulo FROM ttag_module WHERE id_tag IN (".$groups_and_tags[$agent_group]."))"; } } - $agent_modules_sql = "SELECT ".$select_fields ." - FROM tagente_modulo - WHERE id_agente=". $id_agent . - $tag_filter . - $filter_sql ." - ORDER BY nombre"; + if ($get_filter_status != -1) { + $agent_modules_sql = "SELECT ".$select_fields ." + FROM tagente_modulo, tagente_estado + WHERE tagente_modulo.id_agente=". $id_agent . + " AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo + AND tagente_estado.estado = ".$get_filter_status . + $tag_filter . + $filter_sql ." + ORDER BY nombre"; + } else { + + $agent_modules_sql = "SELECT ".$select_fields ." + FROM tagente_modulo + WHERE id_agente=". $id_agent . + $tag_filter . + $filter_sql ." + ORDER BY nombre"; + } $agent_modules = db_get_all_rows_sql($agent_modules_sql); diff --git a/pandora_console/operation/agentes/estado_agente.php b/pandora_console/operation/agentes/estado_agente.php index 4bc1df80a0..903fe97561 100644 --- a/pandora_console/operation/agentes/estado_agente.php +++ b/pandora_console/operation/agentes/estado_agente.php @@ -119,6 +119,8 @@ $refr = get_parameter('refr', 0); $recursion = get_parameter('recursion', 0); $status = (int) get_parameter ('status', -1); +$strict_user = db_get_value('strict_acl', 'tusuario', 'id_user', $config['id_user']); + $onheader = array(); if (check_acl ($config['id_user'], 0, "AW")) { @@ -139,8 +141,10 @@ if (check_acl ($config['id_user'], 0, "AW")) { ui_print_page_header ( __("Agent detail"), "images/agent_mc.png", false, "agent_status", false, $onheader); -if (tags_has_user_acl_tags()) { - ui_print_tags_warning(); +if (!$strict_user) { + if (tags_has_user_acl_tags()) { + ui_print_tags_warning(); + } } // User is deleting agent @@ -342,43 +346,72 @@ else { $groups = array_keys($user_groups); } -$total_agents = 0; -$agents = false; -$total_agents = agents_get_agents(array ( - 'disabled' => 0, - 'id_grupo' => $groups, - 'search' => $search_sql, - 'status' => $status), - array ('COUNT(*) as total'), 'AR', false); -$total_agents = isset ($total_agents[0]['total']) ? $total_agents[0]['total'] : 0; +if ($strict_user) { - -$agents = agents_get_agents(array ( - 'order' => 'nombre ' . $order_collation . ' ASC', - 'id_grupo' => $groups, - 'disabled' => 0, - 'status' => $status, - 'search' => $search_sql, - 'offset' => (int) get_parameter ('offset'), - 'limit' => (int) $config['block_size'] ), + $filter = array ( + 'order' => 'tagente.nombre COLLATE utf8_general_ci ASC', + 'disabled' => 0, + 'status' => $status, + 'search' => $search, + 'offset' => (int) get_parameter ('offset'), + 'limit' => (int) $config['block_size']); + + if ($group_id > 0) { + $groups = array($group_id); + if ($recursion) { + $groups = groups_get_id_recursive($group_id, true); + } + $filter['id_group'] = implode(',', $groups); + } + + $fields = array ('tagente.id_agente','tagente.id_grupo','tagente.id_os','tagente.ultimo_contacto','tagente.intervalo','tagente.comentarios description','tagente.quiet', + 'tagente.normal_count','tagente.warning_count','tagente.critical_count','tagente.unknown_count','tagente.notinit_count','tagente.total_count','tagente.fired_count'); + + $acltags = tags_get_user_module_and_tags ($config['id_user'],'AR', $strict_user); + + $agents = tags_get_all_user_agents (false, $config['id_user'], $acltags, $filter, $fields, false, $strict_user, true); - array ('id_agente', - 'id_grupo', - 'id_os', - 'ultimo_contacto', - 'intervalo', - 'comentarios description', - 'quiet', - 'normal_count', - 'warning_count', - 'critical_count', - 'unknown_count', - 'notinit_count', - 'total_count', - 'fired_count'), - 'AR', - $order); + $total_agents = count($agents); + +} else { + $total_agents = 0; + $agents = false; + + $total_agents = agents_get_agents(array ( + 'disabled' => 0, + 'id_grupo' => $groups, + 'search' => $search_sql, + 'status' => $status), + array ('COUNT(*) as total'), 'AR', false); + $total_agents = isset ($total_agents[0]['total']) ? $total_agents[0]['total'] : 0; + + $agents = agents_get_agents(array ( + 'order' => 'nombre ' . $order_collation . ' ASC', + 'id_grupo' => $groups, + 'disabled' => 0, + 'status' => $status, + 'search' => $search_sql, + 'offset' => (int) get_parameter ('offset'), + 'limit' => (int) $config['block_size'] ), + + array ('id_agente', + 'id_grupo', + 'id_os', + 'ultimo_contacto', + 'intervalo', + 'comentarios description', + 'quiet', + 'normal_count', + 'warning_count', + 'critical_count', + 'unknown_count', + 'notinit_count', + 'total_count', + 'fired_count'), + 'AR', + $order); +} if (empty ($agents)) { $agents = array (); @@ -472,7 +505,7 @@ foreach ($agents as $agent) { $data[4] = ui_print_group_icon ($agent["id_grupo"], true); - $data[5] = reporting_tiny_stats($agent, true); + $data[5] = reporting_tiny_stats($agent, true, 'agent', ':', $strict_user); $data[6] = $status_img;