X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDispatcher%2FAuthHandler.pm;h=449d68492a69e3ca9ff436578c19e8b2a1d61df7;hb=c13f301e71da717b09f3c7364a9f0c87c4f7a4ea;hp=60dc637200fda538e1b07b04d2355c1727625367;hpb=6afd06adfeb66b481b7240637351a34a41e702d1;p=kivitendo-erp.git diff --git a/SL/Dispatcher/AuthHandler.pm b/SL/Dispatcher/AuthHandler.pm index 60dc63720..449d68492 100644 --- a/SL/Dispatcher/AuthHandler.pm +++ b/SL/Dispatcher/AuthHandler.pm @@ -5,18 +5,26 @@ use strict; use parent qw(Rose::Object); use SL::Dispatcher::AuthHandler::Admin; +use SL::Dispatcher::AuthHandler::None; use SL::Dispatcher::AuthHandler::User; +my %valid_auth_levels = map { ($_ => 1) } qw(user admin none); + sub handle { my ($self, %param) = @_; my $auth_level = $self->get_auth_level(%param); + my $handler_name = "SL::Dispatcher::AuthHandler::" . ucfirst($auth_level); $self->{handlers} ||= {}; $self->{handlers}->{$handler_name} ||= $handler_name->new; - $self->{handlers}->{$handler_name}->handle; + my $ok = $self->{handlers}->{$handler_name}->handle(%param); - return $auth_level; + return ( + auth_level => $auth_level, + keep_auth_vars => $self->get_keep_auth_vars(%param), + auth_ok => $ok, + ); } sub get_auth_level { @@ -26,7 +34,13 @@ sub get_auth_level { : $param{routing_type} eq 'controller' ? "SL::Controller::$param{controller}"->get_auth_level($param{action}) : 'user'; - return $auth_level eq 'user' ? 'user' : 'admin'; + return $valid_auth_levels{$auth_level} ? $auth_level : 'user'; +} + +sub get_keep_auth_vars { + my ($self, %param) = @_; + + return $param{routing_type} eq 'controller' ? "SL::Controller::$param{controller}"->keep_auth_vars_in_form(action => $param{action}) : 0; } 1;