Revision c74f4c31
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
delete_user in Auth.pm überarbeitet