view Lib/Engine/Security.pm @ 30:dd4d72600c69

ORM in works
author Sergey
date Tue, 03 Nov 2009 16:31:47 +0300
parents 03e58a454b20
children 16ada169ca75
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;