Доступ только к своим нарядам на работу

Если не ошибаюсь, нет возможности ограничить область видимости по WorkOrders только конкретно ему лично назначенными нарядами, если несколько пользователей принадлежат к одной организации.
Может есть обходные пути?

Ограничения доступа в стандартном iTop на уровне Организаций.

Если доступ к Наряду будет только у исполнителя, как менеджер будет его контролировать?

Если речь идет об отображении списка только своих тикетов (а не о запрете доступа), то это можно настроить в дашборде.

Спасибо, я посмотрел как сделать список, там в принципе все ясно с дашлетом Object List единственно, чего я не понял, это что нужно написать в запросе после WHERE? Должен быть какой-то плейсхолдер по смыслу, но как он должен выглядеть?

Для запросов на стандартном главном экране это выглядит так:

SELECT UserRequest AS i WHERE i.agent_id = :current_contact_id AND status NOT IN ("closed", "resolved")

С нарядами аналогично:

SELECT WorkOrder WHERE agent_id = :current_contact_id

Насколько я знаю, current_contact_id пока единственный доступный плейсхолдер (если найдёшь другие, напиши).

1 лайк

Спасибо!
Попробовал, в дашбоарде такой подход работает, но можно ли сделать такой же функционал при открытии списка WorkOrder непосредственно в закладке интерфейса Change? Там найти как заменить OQL предложение мне не удалось :frowning:

Можно. Нужно изменить существующий или добавить новый пункт меню. Смотри описание <menu id="name" xsi:type="OQLMenuNode"> по ссылке: XML Data Model Reference [iTop Documentation].

Спасибо еще раз.
Посмотрел, но не понимаю, при чем здесь пункт меню. Я говорю о том списке нарядов, который появляется при клике на ЗАКЛАДКЕ WorkOrders при открытии ОДНОГО из Изменений из любого пункта меню, возвращающего список изменений.
В XML файле есть упоминание об этой закладке
item id=“workorders_list”>

Но никаких OQL к ней не просматривается.
ПыСы.
ХМL текст не хочет отображаться правильно :frowning:

Для этого есть кнопка </> в редакторе сообщения.

Не правильно понял тебя, думал, речь об области меню Управления изменениями.

Посмотри вот тут описание <field id="name" xsi:type="AttributeLinkedSet">. У этого поля есть опциональное свойство <filter>. Думаю, с помощью него можно ограничить список нарядов во вкладке.

Не работает. Этот фильтр используется при добавлении нарядов во вкладку.

Жаль. Это имело бы смысл.
Живой пример такой.
Есть изменение, например на установку Сервис пака на Exchange на главный почтовый сервер компании. Важность и ответственность большая. Кроме собственно установки, идет согласование с разными службами. В результате имеем 4 WorkOrdera, привязанных к одному изменению, один на установку, а другие на согласование, причем разным лицам. Зачем им видеть чужие задания из интерфейса Изменения?

Не вижу ничего плохого в этом, пока у вас 4 наряда, а не 104. Даже наоборот, участники имеют более полное представление о происходящем. К тому же в примере очевидно имеет значение последовательность выполнения (сначала согласования, затем выполнение). Кстати, механизм для согласования изменений, насколько я помню, включен в сам тикет изменения и не требует наряда.

Но если очень хочется, можно текущую вкладку удалить, а вместо неё сделать собственную. Туда можно уже засунуть всё что угодно. Как пример можно посмотреть на вкладки с интерфейсами в сетевых устройствах.

1 лайк

Обознался я). Нужно смотреть на метод <method id="DisplayBareRelations"> в классе Incident:

function DisplayBareRelations(WebPage $oPage, $bEditMode = false)
    {
        parent::DisplayBareRelations($oPage, $bEditMode);

        if (!$bEditMode)
        {
            if (MetaModel::IsValidClass('KnownError'))
            {
                //Search for known errors
                $oPage->SetCurrentTab(Dict::S('Class:UserRequest:KnownErrorList'));
                $iTicketID = $this->GetKey();;
                $oKnownErrorSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT KnownError AS ke JOIN lnkErrorToFunctionalCI AS l1 ON l1.error_id=ke.id JOIN FunctionalCI AS ci ON l1.functionalci_id=ci.id JOIN lnkFunctionalCIToTicket AS l2 ON l2.functionalci_id=ci.id WHERE l2.ticket_id=$iTicketID"));
                $iNumberKE=$oKnownErrorSet->count();
                if ($iNumberKE > 0)
                {
                    $oPage->SetCurrentTab(Dict::S('Class:UserRequest:KnownErrorList')." ($iNumberKE)");
                }
                else
                {
                    $oPage->SetCurrentTab(Dict::S('Class:UserRequest:KnownErrorList'));    
                }            
                self::DisplaySet($oPage, $oKnownErrorSet, array ('menu' => false));
            }
        }
    }

Он добавляет в инциденты кастомную вкладку с известными ошибками. По аналогии можно сделать вкладку с нарядами в изменениях.