Projekt

Allgemein

Profil

Herunterladen (1,37 KB) Statistiken
| Zweig: | Markierung: | Revision:
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;