Revision c74f4c31
SL/Auth.pm | ||
---|---|---|
550 | 550 |
my $self = shift; |
551 | 551 |
my $login = shift; |
552 | 552 |
|
553 |
my $dbh = $self->dbconnect; |
|
554 |
my $id = $self->get_user_id($login); |
|
553 |
die "Need login" unless $login; |
|
555 | 554 |
|
556 |
if (!$id) { |
|
557 |
$dbh->rollback; |
|
558 |
return; |
|
559 |
} |
|
555 |
my $user = SL::DB::Manager::AuthUser->find_by(login => $login) // undef; |
|
556 |
die ("Cannot find valid user for login:" . $login) unless ref $user eq 'SL::DB::AuthUser'; |
|
560 | 557 |
|
561 |
$dbh->begin_work; |
|
558 |
my @clients = @{ $user->clients || [] }; |
|
559 |
|
|
560 |
# get user metadata (email, name, etc) |
|
561 |
my $user_config_values_ref = $user->config_values(); |
|
562 | 562 |
|
563 |
do_query($::form, $dbh, qq|DELETE FROM auth.user_group WHERE user_id = ?|, $id); |
|
564 |
do_query($::form, $dbh, qq|DELETE FROM auth.user_config WHERE user_id = ?|, $id); |
|
565 |
do_query($::form, $dbh, qq|DELETE FROM auth.user WHERE id = ?|, $id); |
|
566 | 563 |
|
567 |
# TODO: SL::Auth::delete_user |
|
568 |
# do_query($::form, $u_dbh, qq|UPDATE employee SET deleted = 't' WHERE login = ?|, $login) if $u_dbh && $user_db_exists; |
|
564 |
# Flag corresponding entries in 'employee' as deleted. |
|
565 |
# and restore the most important user data in employee |
|
566 |
# TODO try and catch the whole transaction {user->delete; update employee} {exception} |
|
567 |
# more or less impossible, because we access at least 2 different databases |
|
568 |
# at least user->delete is the last action and it is safe to run the updates on employees |
|
569 |
# more than once |
|
570 |
foreach my $client (@clients) { |
|
571 |
my $dbh = $client->dbconnect(AutoCommit => 1) || next; |
|
572 |
$dbh->do(qq|UPDATE employee SET deleted = TRUE, name = ?, deleted_email = ?, |
|
573 |
deleted_tel = ?, deleted_fax = ?, deleted_signature = ? WHERE login = ?|,undef, |
|
574 |
$user_config_values_ref->{name}, $user_config_values_ref->{email}, |
|
575 |
$user_config_values_ref->{tel}, $user_config_values_ref->{fax}, |
|
576 |
$user_config_values_ref->{signature}, $user->login); |
|
577 |
$dbh->do(qq|DELETE FROM user_preferences WHERE login= ?|, undef, $user->login); |
|
569 | 578 |
|
570 |
$dbh->commit; |
|
579 |
$dbh->disconnect; |
|
580 |
} |
|
581 |
die ('The user could not be deleted.') unless ($user->delete); |
|
571 | 582 |
} |
572 | 583 |
|
573 | 584 |
# -------------------------------------- |
Auch abrufbar als: Unified diff
delete_user in Auth.pm überarbeitet