From 7e61972690cfa1f688ebd9770fcf9d100b9dfdd0 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Mon, 9 Nov 2020 11:19:10 +0100 Subject: [PATCH] =?utf8?q?Employee-Controller:=20beim=20Gel=C3=B6scht-Setz?= =?utf8?q?en=20Verkn=C3=BCpfung=20in=20Auth-DB=20l=C3=B6sen?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- SL/Controller/Employee.pm | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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)); -- 2.20.1