summaryrefslogtreecommitdiffstats
path: root/library/Director/Auth/MonitoringRestriction.php
blob: 1fb6013c8d152a8516b2e131dbaeab39a0d36d3f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

namespace Icinga\Module\Director\Auth;

use Icinga\Authentication\Auth;
use Icinga\Data\Filter\Filter;

class MonitoringRestriction
{
    public static function getObjectsFilter(Auth $auth): Filter
    {
        $restriction = Filter::matchAny();
        $restriction->setAllowedFilterColumns([
            'host_name',
            'hostgroup_name',
            'instance_name',
            'service_description',
            'servicegroup_name',
            function ($c) {
                return preg_match('/^_(?:host|service)_/i', $c);
            }
        ]);
        foreach ($auth->getRestrictions(Restriction::MONITORING_RW_OBJECT_FILTER) as $filter) {
            if ($filter === '*') {
                return Filter::matchAll();
            }
            $restriction->addFilter(Filter::fromQueryString($filter));
        }

        if ($restriction->isEmpty()) {
            return Filter::matchAll();
        }

        return $restriction;
    }
}