60dc637200fda538e1b07b04d2355c1727625367
[kivitendo-erp.git] / SL / Dispatcher / AuthHandler.pm
1 package SL::Dispatcher::AuthHandler;
2
3 use strict;
4
5 use parent qw(Rose::Object);
6
7 use SL::Dispatcher::AuthHandler::Admin;
8 use SL::Dispatcher::AuthHandler::User;
9
10 sub handle {
11   my ($self, %param) = @_;
12
13   my $auth_level                       = $self->get_auth_level(%param);
14   my $handler_name                     = "SL::Dispatcher::AuthHandler::" . ucfirst($auth_level);
15   $self->{handlers}                  ||= {};
16   $self->{handlers}->{$handler_name} ||= $handler_name->new;
17   $self->{handlers}->{$handler_name}->handle;
18
19   return $auth_level;
20 }
21
22 sub get_auth_level {
23   my ($self, %param) = @_;
24
25   my $auth_level = $param{routing_type} eq 'old'        ? ($param{script} eq 'admin' ? 'admin' : 'user')
26                  : $param{routing_type} eq 'controller' ? "SL::Controller::$param{controller}"->get_auth_level($param{action})
27                  :                                        'user';
28
29   return $auth_level eq 'user' ? 'user' : 'admin';
30 }
31
32 1;