kivitendo/SL/Dispatcher/AuthHandler.pm @ 79b7fc43
d8ac0828 | Moritz Bunkus | package SL::Dispatcher::AuthHandler;
|
||
6afd06ad | Moritz Bunkus | |||
use strict;
|
||||
use parent qw(Rose::Object);
|
||||
use SL::Dispatcher::AuthHandler::Admin;
|
||||
540c0b5e | Moritz Bunkus | use SL::Dispatcher::AuthHandler::None;
|
||
6afd06ad | Moritz Bunkus | use SL::Dispatcher::AuthHandler::User;
|
||
540c0b5e | Moritz Bunkus | my %valid_auth_levels = map { ($_ => 1) } qw(user admin none);
|
||
6afd06ad | Moritz Bunkus | sub handle {
|
||
my ($self, %param) = @_;
|
||||
my $auth_level = $self->get_auth_level(%param);
|
||||
4a12c839 | Sven Schöling | |||
6afd06ad | Moritz Bunkus | my $handler_name = "SL::Dispatcher::AuthHandler::" . ucfirst($auth_level);
|
||
$self->{handlers} ||= {};
|
||||
$self->{handlers}->{$handler_name} ||= $handler_name->new;
|
||||
d8ac0828 | Moritz Bunkus | my $ok = $self->{handlers}->{$handler_name}->handle(%param);
|
||
6afd06ad | Moritz Bunkus | |||
540c0b5e | Moritz Bunkus | return (
|
||
auth_level => $auth_level,
|
||||
keep_auth_vars => $self->get_keep_auth_vars(%param),
|
||||
0e451e1b | Moritz Bunkus | auth_ok => $ok,
|
||
540c0b5e | Moritz Bunkus | );
|
||
6afd06ad | Moritz Bunkus | }
|
||
sub get_auth_level {
|
||||
my ($self, %param) = @_;
|
||||
my $auth_level = $param{routing_type} eq 'old' ? ($param{script} eq 'admin' ? 'admin' : 'user')
|
||||
: $param{routing_type} eq 'controller' ? "SL::Controller::$param{controller}"->get_auth_level($param{action})
|
||||
: 'user';
|
||||
540c0b5e | Moritz Bunkus | return $valid_auth_levels{$auth_level} ? $auth_level : 'user';
|
||
}
|
||||
sub get_keep_auth_vars {
|
||||
my ($self, %param) = @_;
|
||||
d8ac0828 | Moritz Bunkus | return $param{routing_type} eq 'controller' ? "SL::Controller::$param{controller}"->keep_auth_vars_in_form(action => $param{action}) : 0;
|
||
6afd06ad | Moritz Bunkus | }
|
||
1;
|