view Lib/Engine/Security.pm @ 111:6c25ea91c985

ControllerUnit concept
author wizard
date Tue, 18 May 2010 01:33:37 +0400
parents 16ada169ca75
children
line wrap: on
line source

use strict;
package Engine::Security;
use Security::Auth;
use Security;
use Engine::Security::Auth;

our @AuthMethods;
my $AuthResult;
my $AuthMod;
my $AuthMethod;

# use last auth method as default
$AuthMethod = Engine::Security::Auth->new(%{$AuthMethods[$#AuthMethods]}) if @AuthMethods;

sub AuthenticateContext {
    Security->CurrentSession(undef); #prevent previous session from closing
    foreach my $method (@AuthMethods) {
        my $AuthObj = Engine::Security::Auth->new(%$method);
        $AuthResult = $AuthObj->DoAuth();
        # обновить текущий контекст безопасности, только если это необходимо
        $AuthObj->SetAuthResult($AuthResult) if $AuthResult->State == Security::AUTH_FAILED or $AuthResult->State == Security::AUTH_SUCCESS;
        $AuthMethod = $AuthObj and last if $AuthResult->State != Security::AUTH_FAILED and $AuthResult->State != Security::AUTH_NOAUTH;
    }
    $AuthMod = $AuthMethod->AuthMod if $AuthMethod;
}

sub SetAuthResult {
    shift;
    $AuthMethod->SetAuthResult(@_) if $AuthMethod;
}

sub AuthMod {
    return $AuthMethod ? $AuthMethod->AuthMod : undef;
}

1;