Mercurial > pub > Impl
view Lib/IMPL/Web/Security.pm @ 171:59e5fcb59d86
Исправления, изменена концепция веб-форм
author | sourcer |
---|---|
date | Mon, 06 Jun 2011 03:30:36 +0400 |
parents | 4267a2ac3d46 |
children | d1676be8afcc |
line wrap: on
line source
package IMPL::Web::Security; use strict; use parent qw(IMPL::Object IMPL::Security IMPL::Object::Autofill); require IMPL::Web::Security::Session; use IMPL::Class::Property; use IMPL::Security::Auth qw(:Const); __PACKAGE__->PassThroughArgs; BEGIN { public property sourceUser => prop_all; public property sourceSession => prop_all; } sub CTOR { my ($this) = @_; die new IMPL::InvalidArgumentException("An argument is required",'sourceUser') unless $this->sourceUser; die new IMPL::InvalidArgumentException("An argument is required",'sourceSession') unless $this->sourceSession; } sub AuthUser { my ($this,$name,$package,$challenge) = @_; my $user = $this->sourceUser->find({name => $name}) or return { status => AUTH_FAIL, answer => "Can't find a user '$name'" }; my $auth; if ( my $secData = $user->secData($package) ) { $auth = $package->new($secData); } else { die new IMPL::SecurityException("Authentication failed","A sec data for the $package isn't found"); } my ($status,$answer) = $auth->DoAuth($challenge); return { status => $status, answer => $answer, context => $this->MakeContext( $user, [$user->roles], $auth ) } } sub MakeContext { my ($this,$principal,$roles,$auth) = @_; return $this->sourceSession->create( { principal => $principal, rolesAssigned => $roles, auth => $auth } ); } 1; __END__ =pod =head1 NAME C<IMPL::Web::Security> . =head1 SINOPSYS =begin code xml <security type='IMPL::Config::Activator'> <factory>IMPL::Web::Security</factory> <parameters type='HASH'> <sessionFactory type='IMPL::Object::Factory'> <factory type='IMPL::Object::Factory'>App::Data::Session</factory> <method>insert</method> </sessionFactory> </parameters> </security> =end code xml =head1 DESCRIPTION . , , . . . C<IMPL::Web::Session> . , . C<IMPL::Web::User> , C<IMPL::Security::Principal>, C<IMPL::Security::Auth>. =head1 MEMBERS =cut