Используется на крупном металлургическом предприятии.
Используется очень активно, что привело к увеличению числа очередей.
Создана одна очередь для поступающих заявок.
Для ограничения прав создания заявителями заявок в очередях было создано правило (ACL) которое позволяет из интерфейса пользователя (Action => [ 'CustomerTicketMessage' ]) создавать заявки только в одной очереди.
Создание данного правила было вынужденным. Нам не нужно чтобы пользователь сам выбирал категорию своей проблемы - за него это сделают диспетчеры.
Для всех заявителей мы определили одну группу по умолчанию:
$Self->{CustomerGroupAlwaysGroups} = ['customers'];
Без дополнительного правила (ACL) заявитель находящийся в группе customers может создать заявку в любой очереди и видит свои заявки находящиеся в очередях, которым назначена группа 'customers'.
Всем очередям нашей OTRS на данный момент назначена как раз группа 'customers', чтобы пользователь всегда видел свои заявки в интерфейсе заявителя и мог прослеживать их статус.
Если переместить заявку в очередь, группа для которой назначена иная чем 'customers', например 'users', то заявитель теряет свою заявку, и перестает получать какие-либо уведомления на электронный адрес, не смотря на то, что является владельцем-заявителем. Именно поэтому на уровне прав мы не могли решить проблему, назначить группу 'customers' только для одной очереди.
Но с ростом числа очередей появилась необходимость разграничить права различных групп агентов.
* Существуют наборы очередей,
* А также группы агентов которые обслуживают эти очереди.
* Есть группа диспетчеров, которые проверяют общую входящую очередь и распределяют заявки между другими отделами, перемещая заявки.
На данный момент все агенты и диспетчеры имеют полные права на все очереди.
Вроде бы как механизм распределения прав позволяет сделать так, чтоб определенный агент мог только читать заявку и ничего с ней не делать, но как только я забираю у агента права "rw" оставляя при этом все остальные "ro move_into create note owner priority" этот агент тут же теряет возможность видеть заявки. Непонятное поведение!!! При этом если такой пользователь попытается прочитать заявку по прямой ссылке (otrsserver.dom/index.pl?Action=AgentTicketZoom&TicketID=47393) на заявку то видно как действуют эти самые оставленные права "ro move_into create note owner priority". Если к примеру оставить права только "ro" то агент не сможет сделать с заявкой ничего кроме просмотра, печати, и просмотра истории. Если лишить агента вообще каких либо прав, то при просмотре заявки по прямой ссылке, получим отказ в доступе.
Но всё это может перевернуться, если для данной заявки назначить владельцем этого самого агента. В этом случае, даже когда у пользователя нет прав в очереди, в которой находится заявка, он будет иметь полные права над самой заявкой, и это независимо заблокирована заявка на этом агенте или не заблокирована.
Идеальным распределением прав в моем случае было бы
* Назначить каждому набору очередей свою группу.
* Создать роли для каждого набора агентов.
* Назначить для каждой роли права в группах (например дополнительно разрешить перемещение заявок из отдела в отдел начальниками отделов)
* Связать агентов с конкретными ролями.
Но это всё лирика...
ВНИМАНИЕ ВОПРОС!!!
Как агент, имеющий любые права, кроме "rw", будет искать заявки в доступных ему для чтения очередях, если он не видит ни очередей и, как следствие, ни заявок в этих очередях???
ВНИМАНИЕ ВОПРОС НОМЕР 2!!!
Почему когда пользователю выданы права только на перемещение move_into в конкретную группу, то очередь ассоциированная с этой группой отображается в списке возможных перемещений только при подробном рассмотрении заявки (Action=AgentTicketZoom), но не позволяется переместить ту же заявку из интерфейса просмотра очередей (Action=AgentTicketQueue&View=Preview)??? Если же выдать полные права на эту очередь ("rw") или хотя бы 'ro + move_into' то переместить заявку можно из любого интерфейса.
Сверяю вызовы функции для получения списка очередей:
AgentTicketZoom.pm
Code: Select all
my %MoveQueues = $Self->{TicketObject}->MoveList(
TicketID => $Self->{TicketID},
UserID => $Self->{UserID},
Action => $Self->{Action},
Type => 'move_into',
);
Code: Select all
my %MoveQueues = $Self->{TicketObject}->MoveList(
TicketID => $Param{TicketID},
UserID => $Self->{UserID},
Action => $Self->{LayoutObject}->{Action},
Type => 'move_into',
);
Action => $Self->{LayoutObject}->{Action},
на конкретное значение
Action => 'AgentTicketZoom',
не дало положительных результатов. Состояние осталось прежним, если есть "rw" право, то видим очередь в списке для перемещения, если нет, то и переместить в эту очередь из превью нельзя.
Если бы эта проблема не была настолько глобальной, я бы покопался, и, возможно, нашёл бы причину, и даже написал патчик, но что-то я уже не хочу каждый раз при переходе на новую версию OTRS свои патчи писать заново.
Кому интересно можете посмотреть мои патчики в разделе Patches / Module.
Там я выложил только те из моих патчей, которые считаю особенно полезными и в принципе которые хотел бы видеть встроенные в новые версии OTRS.
Размещал их там, когда ещё не было русского раздела форума, поэтому и описание там на английском, но могу и русское описание дать, если заинтересует.
Извините за длинный пост. Краткость не моя сестра.