Sorry, this entry is only available in Brazilian Portuguese. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.
As ACL’s servem para incrementar o sistema de permissões do OTRS. Com elas é possÃvel restringir escolhas de atributos do ticket ou ações possÃveis de serem tomadas de acordo com as propriedades atuais do mesmo (fila atual, estado etc).
Atualmente criamos as ACLs com implementação de códigos no arquivo Kernel/Config.pm (recomendado) e não há interface gráfica para isso. Com sua utilização, é possÃvel inclusive implementar pequenos workflows no sistema.
Vejamos um exemplo de ACL que restringe um chamado de prioridade alta (5) para que seja permitido move-lo apenas para uma fila chamada Alerta:
# ticket acl
$Self->{TicketAcl}->{'ACL-Nome-2'} = {
# match properties
Properties => {
# current ticket match properties
Ticket => {
Queue => ['Raw'],
Priority => ['5 very high'],
}
},
# return possible options (white list)
Possible => {
# possible ticket options (white list)
Ticket => {
Queue => ['Alerta'],
},
},
};
Neste exemplo, é bom que se deixe claro que a única ação que restringimos foi a alteração de fila. As outras ações continuam possÃveis de acordo com as parametrizações e permissões do usuário. Por exemplo, ainda é possÃvel adicionar notas ao chamado, responde-lo, mudar seu status para qualquer um disponÃvel no sistema.
É possÃvel notar que existem dois blocos de código neste exemplo acima. O  primeiro com comentário “# match properties” é a definição das propriedades atuais do ticket, como se fosse um filtro onde definimos em que ocasiões essa ACL será aplicada.
No segundo bloco definimos as restrições ou permissões que os tickets que “cairem” nesta ACL sofrerão.
Action
Vamos aprimorar este exemplo fazendo com que um ticket de prioridade 5 não possa ser fechado na fila Raw através da tela “Fechar” (módulo AgenteTicketClose). Ficaria assim:
# ticket acl
$Self->{TicketAcl}->{'ACL-Alerta5'} = {
# match properties
Properties => {
# current ticket match properties
Ticket => {
Queue => ['Raw'],
Priority => ['5 very high'],
}
},
# return possible options (white list)
Possible => {
# possible ticket options (white list)
Ticket => {
Queue => ['Alerta'],
},
Action => {
AgentTicketClose => 0,
},
},
};
Além de restringir a escolha dos atributos dos tickets, podemos definir quais ações (ou telas) poderão ser exibidas ou não ao agente/cliente. Neste exemplo acima, além de permitir apenas que o agente mova este chamado para fila Alerta, também desabilitamos a tela e o botão “Fechar” (módulo AgenteTicketClose). Assim não encorajaremos o atendente a fechar os tickets de prioridade 5 na fila Raw.
PossibleNot
No entanto, o atendente da ainda pode encerrar o chamado se este estiver na fila Raw, pois não desabilitamos a escolha os estados “Fechado” com e sem exito, ou seja, ele não verá a tela fechar, mas pode fechar o chamado caso clique em “Chamada telefônica realizada” e escolha um dos estados fechado.
Vamos simular então uma ACL onde o atendente nunca poderá fechar um chamado se o mesmo estiver na fila Raw com prioridade 5. Ficaria assim:
# ticket acl
$Self->{TicketAcl}->{'ACL-Alerta5'} = {
# match properties
Properties => {
# current ticket match properties
Ticket => {
Queue => ['Raw'],
Priority => ['5 very high'],
}
},
# return possible options (white list)
Possible => {
# possible ticket options (white list)
Ticket => {
Queue => ['Alerta'],
},
Action => {
AgentTicketClose => 0,
},
},
PossibleNot => {
# possible not ticket options
Ticket => {
State => ['closed successful','closed unsuccessful'],
},
},
};
Notem que adicionamos um terceiro bloco de código, o “PossibleNot”. Ali definimos o que não será possÃvel fazer. Para tentar esclarecer mais:
- Properties: “Quais chamados ou situações”. No nosso caso, todos os chamados que estiverem na fila Raw com prioridade 5 (Muito Alta)
- Possible: “É possÃvel apenas isto”! No nosso caso, em relação a mover chamados, restringimos para que seja apenas possÃvel mover para a fila Alerta
- PossibleNot: “Não é possÃvel apenas isto, o resto pode”! No nosso caso, o atendente poderá escolher todos os estados disponÃveis de ticket, menos “Fechado com sucesso” e “Fechado sem sucesso”.
Expressões Regulares
Também é possÃvel utilizar expressões regulares. No exemplo abaixo (retirado da documentação oficial), exibimos apenas serviços que comecem com a palavra “Hardware”, para um ticket estiver na fila HW ou uma de suas subfilas:
$Self->{TicketAcl}->{'Only-Hardware-Services-for-HW-Queues'} = {
# match properties
# note we don't have "Ticket => {" because there's no ticket yet
Properties => {
Queue => {
Name => ['[RegExp]HW'],
}
},
# return possible options
Possible => {
# possible ticket options
Ticket => {
Service => ['[RegExp]^(Hardware)'],
},
},
};
Vale a pena lembrar que os serviços começados com a palavra “Hardware” continuaram sendo exibidos em outras filas. Foi utilizando esse tipo de ACL que construà um módulo que permite escolher os serviços que queremos exibir em cada uma das filas do sistema.
Parâmetros possÃveis
Aqui temos uma lista de todos os parâmetros possÃveis para as ACLs:
# ticket acl
$Self->{TicketAcl}->{'ACL-Name-Test'} = {
# match properties
Properties => {
# current action match properties
Frontend => {
Action => ['AgentTicketPhone', 'AgentTicketEmail'],
},
# current user match properties
User => {
Group_rw => [
'hotline',
],
},
# current user match properties
Ticket => {
Queue => ['Raw'],
State => ['new', 'open'],
Priority => ['some priority'],
Lock => ['lock'],
CustomerID => ['some id'],
CustomerUserID => ['some id'],
TicketFreeKey1 => ['some key'],
TicketFreeKey2 => ['some key'],
# ...
TicketFreeKey8 => ['some key'],
TicketFreeText1 => ['some value'],
TicketFreeText2 => ['some value'],
# ...
TicketFreeText8 => ['some value'],
}
},
# return possible options (white list)
Possible => {
# possible ticket options (white list)
Ticket => {
Queue => ['Hotline', 'Koordination'],
State => => ['some state'],
Priority => ['5 very high'],
TicketFreeKey1 => ['some key'],
TicketFreeKey2 => ['some key'],
# ...
TicketFreeKey8 => ['some key'],
TicketFreeText1 => ['some value'],
TicketFreeText2 => ['some value'],
# ...
TicketFreeText8 => ['some value'],
},
# possible action options (white list)
Action => {
AgentTicketLock => 1,
AgentTicketZoom => 1,
AgentTicketClose => 1,
AgentTicketPending => 0,
AgentTicketNote => 1,
AgentTicketHistory => 0,
AgentTicketPriority => 1,
AgentTicketFreeText => 0,
AgentTicketHistory => 1,
AgentTicketCompose => 1,
AgentTicketBounce => 1,
AgentTicketTicketPrint => 0,
AgentTicketForward => 1,
AgentTicketTicketLink => 1,
AgentTicketPrint => 1,
AgentTicketPhone => 1,
AgentTicketCustomer => 1,
AgentTicketOwner => 0,
},
},
# remove options (black list)
PossibleNot => {
# possible ticket options (black list)
Ticket => {
Queue => ['Hotline', 'Koordination'],
State => ['closed', 'removed'],
},
},
};
Consulte também: