From: Moritz Bunkus Date: Mon, 9 Nov 2020 10:19:10 +0000 (+0100) Subject: Employee-Controller: beim Gelöscht-Setzen Verknüpfung in Auth-DB lösen X-Git-Tag: kivitendo-mebil_0.1-0~9^2~660 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=7e61972690cfa1f688ebd9770fcf9d100b9dfdd0;p=kivitendo-erp.git Employee-Controller: beim Gelöscht-Setzen Verknüpfung in Auth-DB lösen Beim Anlegen von Benutzer*inen in der Auth-DB werden sie nicht zwangsweise auch in der Mandanten-DB angelegt, z.B. wenn die in dem Moment noch nicht existiert. Daher werden bei jedem Login in einem Mandanten alle Benutzer*innen, die in dem Moment mit dem Mandanten verknüpft sind, in der Mandanten-DB angelegt (falls noch nicht existierend) und das »gelöscht«-Flag wieder entfernt. Beim Löschen von Benutzer*innen aus dem Admin-Bereich heraus ist das soweit auch OK, denn dann wird in der Auth-DB der Eintrag entfernt und in der Mandanten-DB das Login auf »gelöscht« gesetzt. Es gibt aber auch im Mandantenbereich einen Controller zum Bearbeiten von Benutzer*innen, in dem das »gelöscht«-Flag gesetzt werden kann. Und hier wurde bisher nur die Mandanten-DB angefasst, nicht aber die Auth-DB. Wenn also hier ein(e) Benutzer*in auf »gelöscht« gesetzt wird, so wurde beim nächsten Login in den Mandanten in der Auth-DB nachgesehen, dort war der Account noch verknüpft, also wurde das »gelöscht«-Flag wieder entfernt. Fix ist, dass nun auch in der Auth-DB die Verknüpfung des Accounts mit dem Mandanten entfernt wird. Der Account wird in der Auth-DB aber nicht gelöscht, weil er ja auch noch auf andere Mandanten Zugriff haben könnte. Fix für #97. --- diff --git a/SL/Controller/Employee.pm b/SL/Controller/Employee.pm index 679227202..431c8b775 100644 --- a/SL/Controller/Employee.pm +++ b/SL/Controller/Employee.pm @@ -35,7 +35,24 @@ sub action_edit { sub action_save { my ($self, %params) = @_; - $self->{employee}->save; + SL::DB->client->with_transaction(sub { + 1; + + $self->{employee}->save; + + if ($self->{employee}->deleted) { + my $auth_user = SL::DB::Manager::AuthUser->get_first(login => $self->{employee}->login); + if ($auth_user) { + SL::DB::Manager::AuthClientUser->delete_all( + where => [ + client_id => $::auth->client->{id}, + user_id => $auth_user->id, + ]); + } + } + + 1; + }); flash('info', $::locale->text('Employee #1 saved!', $self->{employee}->safe_name));