KIX - Forum

Deutsch => Entwicklung => Thema gestartet von: tom-dwzi am 09.07.2019 15:27:02

Titel: mehrere CustomerUser-DBs, Berechtigungen werden nicht abgefragt
Beitrag von: tom-dwzi am 09.07.2019 15:27:02
Hallo,

Wir haben mehrere CustomerUser-DBs angelegt und für jede separate Gruppen angelegt.

Fehler 1:
Es werden beim Aufruf der CustomerUser (/kix/index.pl?Action=AdminCustomerUser;Nav=Agent) immer alle potentiellen DBs angezeigt, obwohl der Agent nur für eine DB berechtigt wurde.
(Abfrage der Berechtigung fehlt im Perl Skript)

Fehler 2:
Wenn nun versucht wird mit einer nicht berechtigte CustomerUser-DB ein User anzulegen erhält man nach Eingabe der Daten (Submit) einen 500er-Fehler.
(Can't call method "CustomerUserAdd" on an undefined value at /opt/kix/Kernel/System/CustomerUser.pm line 494.)
Eine entsprechende KIX-Fehlermeldung fehlt, da die Berechtigung nicht abgefragt wurde.

Version: KIX 17.4.1-0

Liebe Grüße
Thomas
Titel: Re: mehrere CustomerUser-DBs, Berechtigungen werden nicht abgefragt
Beitrag von: Tino Voigt am 15.07.2019 08:13:28
Hallo tom-dwzi,

möchte man die Sichbarkeit von Kundendaten auf Agenten Gruppen einschränken, müsste noch der Eintrag Access Groups in der Config.pm in der Konfiguration des jeweiligen Backends ergänzt werden:

$Self->{CustomerUser} = {
    Name   => 'Database Backend',
    Module => 'Kernel::System::CustomerUser::DB',
    […]
    AccessGroups => [ 'users', 'admin'],
    Map => [
        # note: Login, Email and CustomerID needed!
        # …
    ],
};

In diesem Beispiel haben nur Agenten der Gruppen „users“ und „admin“ Rechte die Kundendaten anzuzeigen.

Viele Grüße, Tino Voigt
Titel: Re: mehrere CustomerUser-DBs, Berechtigungen werden nicht abgefragt
Beitrag von: tom-dwzi am 15.07.2019 10:37:51
Hallo Tino,
Danke für die Info. Das Feld AccessGroups wurde bereits hinzugefügt.Es werden auch nur die Daten der berechtigten DBs angezeigt.
Hier handelt es sich um einen Bug in der Abfrage der verfügbaren DBs, da hier alle DBs abgefragt werden und nicht nur die mit Berechtigungen.

Liebe GrüßeThomas
Titel: Re: mehrere CustomerUser-DBs, Berechtigungen werden nicht abgefragt
Beitrag von: tom-dwzi am 06.02.2020 18:18:05
Ich hab mir mal die Mühe gemacht im Source Code den entsprechenden Part zu überarbeiten, damit klar ist, was ich meine.Unter index.pl?Action=AdminCustomerUser;Nav=Agent werden links prinzipiell alle verfügbaren Kundendatenbanken angezeigt, unabhängig von AccessGroup, da diese nicht abgefragt wird.
Mit diesen Code-Änderungen werden nur die DBs angezeigt, die auch unter AccessGroup eingetragen sind.

# Kernel/System/CustomerUser.pm# line 195ff:sub CustomerSourceList {
    my ( $Self, %Param ) = @_;

    # get config object
    my $ConfigObject = $Kernel::OM->Get('Kernel::Config');

    my %Data;

    my @UserGroups;
        my $GroupObject = $Kernel::OM->Get('Kernel::System::Group');
        @UserGroups = $GroupObject->GroupMemberList(
            UserID => $Param{UserID},
            Type   => 'ro',
            Result => 'Name',
        );

    SOURCE:
    for my $Count ( '', 1 .. 10 ) {

        next SOURCE if !$ConfigObject->Get("CustomerUser$Count");

        my $BackendGroups = $ConfigObject->Get("CustomerUser$Count")->{AccessGroups} || "";
        my $Access        = 1;
        if ( $BackendGroups && ref $BackendGroups eq 'ARRAY' ) {
             GROUP:
             for my $Group ( @{$BackendGroups} ) {
                 $Access = 0;
                 next GROUP if ( ( grep { $_ eq $Group; } @UserGroups ) == 0 );
                 $Access = 1;
                 last;
             }
         }

        if ($Access) {
                if ( defined $Param{ReadOnly} ) {
                    my $CustomerBackendConfig = $ConfigObject->Get("CustomerUser$Count");
                    if ( $Param{ReadOnly} ) {
                        next SOURCE if !$CustomerBackendConfig->{ReadOnly};
                    }
                    else {
                        next SOURCE if $CustomerBackendConfig->{ReadOnly};
                    }
                }
                $Data{"CustomerUser$Count"} = $ConfigObject->Get("CustomerUser$Count")->{Name}
                    || "No Name $Count";
        }
    }
    return %Data;
}

# Kernel/Modules/AdminCustomerUser.pm# line 690ff:    my %CustomerSource = $CustomerUserObject->CustomerSourceList(
        ReadOnly => 0,
        UserID => $Self->{UserID}
    );

Titel: Re: mehrere CustomerUser-DBs, Berechtigungen werden nicht abgefragt
Beitrag von: Tino Voigt am 27.02.2020 12:02:09
Hallo tom-dwzi,

Vielen Dank für deine Mühe.

Ich habe das Thema zur weiteren Prüfung an unserer Entwicklungsabteilung übergeben.

Viele Grüße, Tino Voigt