Have a Question?
ACL – Criando e configurando Access Control Lists
Introdução
As ACL’s servem para incrementar o sistema de permissões do LigeroSmart. 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).
O LigeroSmart conta com uma interface para criação e edição de ACLs – acesse Administração → Listas de Controle de Acesso
Adicione uma nova ACL clicando em “Criar nova ACL”.
Veja a seguir um exemplo de ACL que restringe um chamado de prioridade alta (5) para que seja permitido movê-lo apenas para uma fila chamada Alerta:
É 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.
Preencha os campos a seguir:
Dicas:
- As ACLs são interpretadas em ordem alfabética, por tanto, uma ACL que comece com a letra “Z” pode invalidar as condições de uma ACL que começa com a letra “A”.
- Altere a validade da ACL para “Válido”
Após preencher esta tela, clique em Salvar.
Você terá então que começar a compor sua ACL na tela abaixo:
Exemplo 1:
Vamos entender a seguir, as seções que compõe uma ACL.
Seções compõe as ACLs
Properties
Aqui definimos os critérios, ou seja, o filtro que definirá se esta ACL será executada ou não. No exemplo abaixo, definimos que os chamados serão afetados caso o atendente selecione a prioridade ‘5 muito alta’ na tela em que está.
Properties => { Ticket => { Priority => ['5 very high'], } },
PropertiesDatabase
Assim como “Properties”, esta seção é um filtro. A diferença entre ambas é que Properties realiza a comparação com os valores que estão na tela, durante uma modificação por exemplo de valores, reclassificação de chamados etc, enquanto PropertiesDatabase realiza uma comparação com as informações que estão no banco de dados do chamado. No exemplo abaixo, os chamados que possuem prioridade muito alta serão afetados, independentemente das alterações em curso na tela.
PropertiesDatabase => { Ticket => { Priority => ['5 very high'], } },
Possible
Define quais são os valores que poderão ser escolhidos. Outros valores serão excluídos da exibição. No exemplo abaixo, os chamados que corresponderem aos critérios definidos em Properties ou PropertiesDatabase, poderão apenas serem movidos para a fila ‘Alerta’ e para nenhuma outra. Lembrando que aqui estamos restringindo apenas a fila para onde ele poderá ser movido, todas as outras funções tais como criar nota, responder, bloquear, não são afetadas.
Possible => { Ticket => { Queue => ['Alerta'], }, },
PossibleNot
Define os valores que não poderão ser exibidos. Todos os outros valores serão. No exemplo abaixo, os chamados poderão ser movidos para quaisquer filas, menos para a fila Alerta.
PossibleNot => { Ticket => { Queue => ['Alerta'], }, },
Exemplo 2:
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:
Code exemplo 2:
# 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 => ['Raw'], }, Action => { AgentTicketClose => 0, }, }, PossibleNot => { # possible not ticket options Ticket => { State => ['closed successful','closed unsuccessful'], }, }, };
PossibleAdd
Adiciona valores possíveis a um atributo, sem ser restritivo. Um exemplo: permitir que um usuário encerre o chamado apenas após este ser classificado:
- Crie uma ACL que retire os estados “[RegExp]^closed” usando o PossibleNot.
- Crie uma ACL que adiciona os mesmos estados usando o PossibleAdd, quando o serviço for definido.
Propriedades
Action
No exemplo acima, vimos o elemento “Action”. Ele define se uma tela do sistema ficará disponível ou não para o atendente. Porém, ela deve ser declarada apenas na seção “Possible”, mesmo que o objetivo seja negar a exibição do módulo. Para habilitar, coloque o valor 1, para negar, coloque o valor 0, como no exemplo acima:
Action => { AgentTicketClose => 0, },
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}->{'100-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
ConfigMatch: Properties: # Match properties (current values from the form). CustomerUser: UserLogin: - some login UserCustomerID: - some customer ID Group_rw: - some group DynamicField: # Names must be in DynamicField_<field_name> format. # Values for dynamic fields must always be the untranslated internal # data keys specified in the dynamic field definition and not the # data values shown to the user. # Using the key is also mandatory for dynamic field of type database # and dynamic field of type web service. DynamicField_Field1: - some value DynamicField_OtherField: - some value DynamicField_TicketFreeText2: - some value # more dynamic fields Frontend: Endpoint: - AgentFrontend::PersonalPreferences - AgentFrontend::ProcessTicketNextStep - AgentFrontend::Ticket::Action::Close - AgentFrontend::Ticket::Action::Customer - AgentFrontend::Ticket::Action::EmailOutbound - AgentFrontend::Ticket::Action::FreeText - AgentFrontend::Ticket::Action::Link - AgentFrontend::Ticket::Action::Lock - AgentFrontend::Ticket::Action::Merge - AgentFrontend::Ticket::Action::Move - AgentFrontend::Ticket::Action::Note - AgentFrontend::Ticket::Action::Owner - AgentFrontend::Ticket::Action::Pending - AgentFrontend::Ticket::Action::PhoneCallInbound - AgentFrontend::Ticket::Action::PhoneCallOutbound - AgentFrontend::Ticket::Action::Print - AgentFrontend::Ticket::Action::Priority - AgentFrontend::Ticket::Action::Process - AgentFrontend::Ticket::Action::Redirect - AgentFrontend::Ticket::Action::Responsible - AgentFrontend::Ticket::Action::SmsOutbound - AgentFrontend::Ticket::Action::TicketHistory - AgentFrontend::Ticket::Action::Unlock - AgentFrontend::Ticket::Action::Unwatch - AgentFrontend::Ticket::Action::Watch - AgentFrontend::Ticket::InlineEditing::Property::CustomerUserID - AgentFrontend::Ticket::InlineEditing::Property::Lock - AgentFrontend::Ticket::InlineEditing::Property::Owner - AgentFrontend::Ticket::InlineEditing::Property::Priority - AgentFrontend::Ticket::InlineEditing::Property::Queue - AgentFrontend::Ticket::InlineEditing::Property::Responsible - AgentFrontend::Ticket::InlineEditing::Property::Service - AgentFrontend::Ticket::InlineEditing::Property::State - AgentFrontend::Ticket::InlineEditing::Property::Type - AgentFrontend::Ticket::InlineEditing::Property::Watch - AgentFrontend::TicketArticle::Action::CopyLink - AgentFrontend::TicketArticle::Action::Forward - AgentFrontend::TicketArticle::Action::MarkAsImportant - AgentFrontend::TicketArticle::Action::MessageLog - AgentFrontend::TicketArticle::Action::Plain - AgentFrontend::TicketArticle::Action::Print - AgentFrontend::TicketArticle::Action::Redirect - AgentFrontend::TicketArticle::Action::Reply - AgentFrontend::TicketArticle::Action::ReplyAll - AgentFrontend::TicketArticle::Action::ReplyToNote - AgentFrontend::TicketArticle::Action::ReplyViaSms - AgentFrontend::TicketArticle::Action::Split - AgentFrontend::TicketArticle::Action::UnmarkAsImportant - AgentFrontend::TicketCreate::Email - AgentFrontend::TicketCreate::Phone - AgentFrontend::TicketCreate::Process - AgentFrontend::TicketCreate::SMS - AgentFrontend::TicketDetailView - AgentFrontend::TicketDetailView::Property - AgentFrontend::TicketList::Bulk - AgentFrontend::TicketList::Filters - ... - ExternalFrontend::PersonalPreferences - ExternalFrontend::ProcessTicketCreate - ExternalFrontend::ProcessTicketNextStep - ExternalFrontend::Ticket::ExportList - ExternalFrontend::Ticket::List - ExternalFrontend::Ticket::Print - ExternalFrontend::TicketCreate - ExternalFrontend::TicketDetailView - ... Owner: UserLogin: - some login Group_rw: - some group Role: - admin # more owner attributes Priority: ID: - some ID Name: - some name # more priority attributes Process: ProcessEntityID: # the process that the current ticket is part of - Process-9c378d7cc59f0fce4cee7bb9995ee3eb ActivityEntityID: # the current activity of the ticket - Activity-f8b2fdebe54eeb7b147a5f8e1da5e35c ActivityDialogEntityID: # the current activity dialog that the agent/customer is using - ActivityDialog-aff0ae05fe6803f38de8fff6cf33b7ce Queue: Name: - Raw QueueID: - some ID GroupID: - some ID Email: - some email RealName: - OTRS System # more queue attributes Responsible: UserLogin: - some login Group_rw: - some group Role: - admin # more responsible attributes Service: ServiceID: - some ID Name: - some name ParentID: - some ID # more service attributes SLA: SLAID: - some ID Name: - some name Calendar: - some calendar # more SLA attributes State: ID: - some ID Name: - some name TypeName: - some state type name TypeID: - some state type ID # more state attributes Ticket: Queue: - Raw State: - new - open Priority: - some priority Lock: - lock CustomerID: - some ID CustomerUserID: - some ID Owner: - some owner DynamicField_Field1: - some value DynamicField_MyField: - some value # more ticket attributes Type: ID: - some ID Name: - some name # more type attributes User: UserLogin: - some_login Group_rw: - some group Role: - admin PropertiesDatabase: # Match properties (existing values from the database). # Please note that Frontend is not in the database, but in the framework. # See section "Properties", the same configuration can be used here. ConfigChange: Possible: # Reset possible options (white list). Action: # Possible action options (white list). - ... ActivityDialog: # Limit the number of possible activity dialogs the agent/customer can use in a process ticket. - ActivityDialog-aff0ae05fe6803f38de8fff6cf33b7ce - ActivityDialog-429d61180a593414789a8087cc4b3c6f - ... Endpoint: # Limit the functions on agent interface. - AgentFrontend::PersonalPreferences - AgentFrontend::ProcessTicketNextStep - AgentFrontend::Ticket::Action::Close - AgentFrontend::Ticket::Action::Customer - AgentFrontend::Ticket::Action::EmailOutbound - AgentFrontend::Ticket::Action::FreeText - AgentFrontend::Ticket::Action::Link - AgentFrontend::Ticket::Action::Lock - AgentFrontend::Ticket::Action::Merge - AgentFrontend::Ticket::Action::Move - AgentFrontend::Ticket::Action::Note - AgentFrontend::Ticket::Action::Owner - AgentFrontend::Ticket::Action::Pending - AgentFrontend::Ticket::Action::PhoneCallInbound - AgentFrontend::Ticket::Action::PhoneCallOutbound - AgentFrontend::Ticket::Action::Print - AgentFrontend::Ticket::Action::Priority - AgentFrontend::Ticket::Action::Process - AgentFrontend::Ticket::Action::Redirect - AgentFrontend::Ticket::Action::Responsible - AgentFrontend::Ticket::Action::SmsOutbound - AgentFrontend::Ticket::Action::TicketHistory - AgentFrontend::Ticket::Action::Unlock - AgentFrontend::Ticket::Action::Unwatch - AgentFrontend::Ticket::Action::Watch - AgentFrontend::Ticket::InlineEditing::Property::CustomerUserID - AgentFrontend::Ticket::InlineEditing::Property::Lock - AgentFrontend::Ticket::InlineEditing::Property::Owner - AgentFrontend::Ticket::InlineEditing::Property::Priority - AgentFrontend::Ticket::InlineEditing::Property::Queue - AgentFrontend::Ticket::InlineEditing::Property::Responsible - AgentFrontend::Ticket::InlineEditing::Property::Service - AgentFrontend::Ticket::InlineEditing::Property::State - AgentFrontend::Ticket::InlineEditing::Property::Type - AgentFrontend::Ticket::InlineEditing::Property::Watch - AgentFrontend::TicketArticle::Action::CopyLink - AgentFrontend::TicketArticle::Action::Forward - AgentFrontend::TicketArticle::Action::MarkAsImportant - AgentFrontend::TicketArticle::Action::MessageLog - AgentFrontend::TicketArticle::Action::Plain - AgentFrontend::TicketArticle::Action::Print - AgentFrontend::TicketArticle::Action::Redirect - AgentFrontend::TicketArticle::Action::Reply - AgentFrontend::TicketArticle::Action::ReplyAll - AgentFrontend::TicketArticle::Action::ReplyToNote - AgentFrontend::TicketArticle::Action::ReplyViaSms - AgentFrontend::TicketArticle::Action::Split - AgentFrontend::TicketArticle::Action::UnmarkAsImportant - AgentFrontend::TicketCreate::Email - AgentFrontend::TicketCreate::Phone - AgentFrontend::TicketCreate::Process - AgentFrontend::TicketCreate::SMS - AgentFrontend::TicketDetailView - AgentFrontend::TicketDetailView::Property - AgentFrontend::TicketList::Bulk - AgentFrontend::TicketList::Filters - ... # Limit the functions on external interface. - ExternalFrontend::PersonalPreferences - ExternalFrontend::ProcessTicketCreate - ExternalFrontend::ProcessTicketNextStep - ExternalFrontend::Ticket::ExportList - ExternalFrontend::Ticket::List - ExternalFrontend::Ticket::Print - ExternalFrontend::TicketCreate - ExternalFrontend::TicketDetailView - ... Process: # Limit the number of possible processes that can be started. - Process-9c378d7cc59f0fce4cee7bb9995ee3eb - Process-12345678901234567890123456789012 - ... Ticket: # Possible ticket options (white list). Queue: - Raw - some other queue State: - some state Priority: - 5 very high DynamicField_Field1: - some value DynamicField_MyField: - some value # more dynamic fields NewOwner: # For ticket action screens, where the Owner is already set. - some owner OldOwner: # For ticket action screens, where the Owner is already set. - some owner Owner: # For ticket create screens, because Owner is not set yet. - some owner # more ticket attributes PossibleAdd: # Add options (white list). # See section "Possible", the same configuration can be used here. PossibleNot: # Remove options (black list). # See section "Possible", the same configuration can be used here. CreateBy: root@localhost CreateTime: 2020-04-15 16:46:23 Description: This is the long description of the ACL to explain its usage. ID: 1 Name: 200-ACL-Reference StopAfterMatch: 0 ValidID: 3