Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision c74f4c31

Von Jan Büren vor 3 Monaten hinzugefügt

  • ID c74f4c31b42a4023a1ba22f7a9eea3b4c62e21ef
  • Vorgänger 7800cf05
  • Nachfolger e5af8407

delete_user in Auth.pm überarbeitet

Unterschiede anzeigen:

SL/Auth.pm
my $self = shift;
my $login = shift;
my $dbh = $self->dbconnect;
my $id = $self->get_user_id($login);
die "Need login" unless $login;
if (!$id) {
$dbh->rollback;
return;
}
my $user = SL::DB::Manager::AuthUser->find_by(login => $login) // undef;
die ("Cannot find valid user for login:" . $login) unless ref $user eq 'SL::DB::AuthUser';
$dbh->begin_work;
my @clients = @{ $user->clients || [] };
# get user metadata (email, name, etc)
my $user_config_values_ref = $user->config_values();
do_query($::form, $dbh, qq|DELETE FROM auth.user_group WHERE user_id = ?|, $id);
do_query($::form, $dbh, qq|DELETE FROM auth.user_config WHERE user_id = ?|, $id);
do_query($::form, $dbh, qq|DELETE FROM auth.user WHERE id = ?|, $id);
# TODO: SL::Auth::delete_user
# do_query($::form, $u_dbh, qq|UPDATE employee SET deleted = 't' WHERE login = ?|, $login) if $u_dbh && $user_db_exists;
# Flag corresponding entries in 'employee' as deleted.
# and restore the most important user data in employee
# TODO try and catch the whole transaction {user->delete; update employee} {exception}
# more or less impossible, because we access at least 2 different databases
# at least user->delete is the last action and it is safe to run the updates on employees
# more than once
foreach my $client (@clients) {
my $dbh = $client->dbconnect(AutoCommit => 1) || next;
$dbh->do(qq|UPDATE employee SET deleted = TRUE, name = ?, deleted_email = ?,
deleted_tel = ?, deleted_fax = ?, deleted_signature = ? WHERE login = ?|,undef,
$user_config_values_ref->{name}, $user_config_values_ref->{email},
$user_config_values_ref->{tel}, $user_config_values_ref->{fax},
$user_config_values_ref->{signature}, $user->login);
$dbh->do(qq|DELETE FROM user_preferences WHERE login= ?|, undef, $user->login);
$dbh->commit;
$dbh->disconnect;
}
die ('The user could not be deleted.') unless ($user->delete);
}
# --------------------------------------

Auch abrufbar als: Unified diff