Kapitel 18. Access Control Lists (ACLs)

Seit OTRS 2.0 können Access Control Lists (ACLs) verwendet werden, um den Zugriff auf Tickets, Module, Queues, usw. zu steuern bzw. um in bestimmten Situationen Aktionen auf Tickets (schließen, verschieben, usw.) zu beeinflussen. ACLs können als Ergänzung zum bestehenden Berechtigungssystem der Rollen und Gruppen verwendet werden, mit ACLs lassen sich , basierend auf Ticket-Attributen, rudimentäre Workflows innerhalb des Systems abbilden.

ACLs können noch nicht über das SysConfig-Interface erstellt werden, sie müssen direkt in die Datei Kernel/Config.pm eingetragen werden. Im folgenden einige Beispiele:

Beispiel 18.1. ACL, die das Verschieben von Tickets in eine Queue nur bei einer Ticket-Priorität von 5 erlaubt

    # ticket acl
    $Self->{TicketAcl}->{'ACL-Name-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 => ['Alert'],
            },
        },
    };


Beispiel 18.2. ACL, die das Schließen von Tickets in der raw Queue verbietet und den Schließen-Schalter ausblendet

    $Self->{TicketAcl}->{'ACL-Name-1'} = {
        # match properties
        Properties => {
            # current ticket match properties
            Ticket => {
                Queue => ['Raw'],
            }
        },
        # return possible options (white list)
        Possible => {
            # possible ticket options (white list)
            Ticket => {
                State => ['new', 'open', 'pending reminder'],
            },
            # possible action options
            Action => {
                AgentTicketLock => 1,
                AgentTicketZoom => 1,
                AgentTicketClose => 0,
                AgentTicketPending => 1,
                AgentTicketNote => 1,
                AgentTicketHistory => 1,
                AgentTicketPriority => 1,
                AgentTicketFreeText => 1,
                AgentTicketHistory => 1,
                AgentTicketCompose => 1,
                AgentTicketBounce => 1,
                AgentTicketTicketPrint => 1,
                AgentTicketForward => 1,
                AgentTicketTicketLink => 1,
                AgentTicketPrint => 1,
                AgentTicketPhone => 1,
                AgentTicketCustomer => 1,
                AgentTicketOwner => 1,
            },
        },
    };


Beispiel 18.3. ACL, die den Status für alle Agenten entfernt und Ihn nur noch für eine Gruppe zur Verfügung stellt

    $Self->{TicketAcl}->{'ACL-Name-5'} = {
        # match properties
        Properties => {
            # current ticket match properties (match always)
        },
        # return possible options
        PossibleNot => {
            # possible ticket options
            Ticket => {
                State => ['closed successful'],
            },
        },
    };


Im folgenden eine Liste aller Parameter, die für ACLs verwendet werden können:

    # 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'],
            },
        },
    };