# HG changeset patch # User sergey # Date 1349799167 -14400 # Node ID 5c82eec23bb698440ed5c8718f664b66f37e4457 # Parent ff1e8fa932f272d21208b5bf7359f0f88dc136d2 Fixed degradations due refactoring diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/DOM/Schema.pm --- a/Lib/IMPL/DOM/Schema.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/DOM/Schema.pm Tue Oct 09 20:12:47 2012 +0400 @@ -17,7 +17,7 @@ Builder => 'IMPL::DOM::Navigator::Builder', XMLReader => 'IMPL::DOM::XMLReader', InflateFactory => 'IMPL::DOM::Schema::InflateFactory', - Loader => 'Code::Loader' + Loader => 'IMPL::Code::Loader' }; use parent qw(IMPL::DOM::Document); @@ -55,7 +55,10 @@ if ($class->isa('IMPL::DOM::Schema::Validator')) { $class = $validatorLoader->GetFullName($nodeName); unless (eval {$class->can('new')}) { - $validatorLoader->Require($nodeName); + eval { + $validatorLoader->Require($nodeName); + }; + my $e = $@; die new IMPL::Exception("Invalid validator",$class,$e) if $e; } } @@ -88,7 +91,7 @@ my $class = ref $this || $this; - my $reader = Reader->( + my $reader = XMLReader->new( Navigator => Builder->new( $class, $class->MetaSchema @@ -129,7 +132,7 @@ return $schema if $schema; - $schema = Schema->new(); + $schema = __PACKAGE__->new(); $schema->appendRange( ComplexNode->new(name => 'schema')->appendRange( @@ -199,7 +202,7 @@ AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator') ), Property->new(name => 'type'), - Property->(name => 'inflator', optional => 1, inflator => 'IMPL::DOM::Schema::InflateFactory') + Property->new(name => 'inflator', optional => 1, inflator => 'IMPL::DOM::Schema::InflateFactory') ), ComplexType->new(type => 'SimpleNode', nativeType => 'IMPL::DOM::Schema::SimpleNode')->appendRange( NodeList->new()->appendRange( diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Exception.pm --- a/Lib/IMPL/Exception.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Exception.pm Tue Oct 09 20:12:47 2012 +0400 @@ -11,6 +11,7 @@ } use parent qw(IMPL::Object::Abstract Error Class::Accessor); +require IMPL::Class::Property::Accessor; BEGIN { __PACKAGE__->mk_accessors( qw(Message Args CallStack Source) ); @@ -84,6 +85,10 @@ ($this->Message || ref $this) . join("\n",'',map { my $s = $_; local $_; indent("$s",1) } @{$this->Args} ) . ( $notrace ? '' : "\n" . $this->CallStack); } +sub _PropertyImplementor { + 'IMPL::Class::Property::Accessor' +} + package IMPL::InvalidOperationException; our @ISA = qw(IMPL::Exception); __PACKAGE__->PassThroughArgs; diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Object/Factory.pm --- a/Lib/IMPL/Object/Factory.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Object/Factory.pm Tue Oct 09 20:12:47 2012 +0400 @@ -1,15 +1,19 @@ package IMPL::Object::Factory; use strict; -use parent qw(IMPL::Object IMPL::Object::Serializable); - -use IMPL::lang qw(:declare :constants); +use IMPL::Const qw(:prop); -BEGIN { - public property factory => PROP_GET | PROP_OWNERSET; - public property parameters => PROP_GET | PROP_OWNERSET; - public property method => PROP_GET | PROP_OWNERSET; -} +use IMPL::declare { + base => [ + 'IMPL::Object' => undef, + 'IMPL::Object::Serializable' => undef + ], + props => [ + factory => PROP_RO, + parameters => PROP_RO, + method => PROP_RO + ] +}; # custom factory, overrides default sub new { diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/SQL/Schema.pm --- a/Lib/IMPL/SQL/Schema.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/SQL/Schema.pm Tue Oct 09 20:12:47 2012 +0400 @@ -1,9 +1,7 @@ use strict; package IMPL::SQL::Schema; -use IMPL::_core::version; - -use IMPL::lang qw(is :declare :constants); +use IMPL::lang qw(is :declare); use parent qw( IMPL::Object diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/SQL/Schema/Column.pm --- a/Lib/IMPL/SQL/Schema/Column.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/SQL/Schema/Column.pm Tue Oct 09 20:12:47 2012 +0400 @@ -2,7 +2,7 @@ package IMPL::SQL::Schema::Column; use parent qw(IMPL::Object IMPL::Object::Autofill); -use IMPL::lang qw( :DEFAULT :compare :declare :constants :hash ); +use IMPL::lang qw( :DEFAULT :compare :declare :hash ); use IMPL::Class::Property::Direct; use IMPL::Exception(); diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/SQL/Schema/Constraint.pm --- a/Lib/IMPL/SQL/Schema/Constraint.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/SQL/Schema/Constraint.pm Tue Oct 09 20:12:47 2012 +0400 @@ -2,7 +2,7 @@ use strict; use warnings; -use IMPL::lang qw(:declare :constants is); +use IMPL::lang qw(:declare is); use parent qw(IMPL::Object IMPL::Object::Disposable); diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/SQL/Schema/Constraint/ForeignKey.pm --- a/Lib/IMPL/SQL/Schema/Constraint/ForeignKey.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/SQL/Schema/Constraint/ForeignKey.pm Tue Oct 09 20:12:47 2012 +0400 @@ -2,7 +2,7 @@ use strict; use warnings; -use IMPL::lang qw(:declare :constants is); +use IMPL::lang qw(:declare is); use parent qw(IMPL::SQL::Schema::Constraint); diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/SQL/Schema/Table.pm --- a/Lib/IMPL/SQL/Schema/Table.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/SQL/Schema/Table.pm Tue Oct 09 20:12:47 2012 +0400 @@ -1,7 +1,7 @@ use strict; package IMPL::SQL::Schema::Table; -use IMPL::lang qw(:declare :constants is); +use IMPL::lang qw(:declare is); use parent qw( IMPL::Object diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/SQL/Schema/Type.pm --- a/Lib/IMPL/SQL/Schema/Type.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/SQL/Schema/Type.pm Tue Oct 09 20:12:47 2012 +0400 @@ -4,7 +4,7 @@ use parent qw(IMPL::Object IMPL::Object::Autofill); -use IMPL::lang qw( :declare :constants :compare ); +use IMPL::lang qw( :declare :compare ); use IMPL::Class::Property::Direct; diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Test/HarnessRunner.pm --- a/Lib/IMPL/Test/HarnessRunner.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Test/HarnessRunner.pm Tue Oct 09 20:12:47 2012 +0400 @@ -3,14 +3,12 @@ use warnings; use parent qw(IMPL::Object IMPL::Object::Autofill IMPL::Object::Serializable); -use IMPL::lang qw(:declare :constants); + use TAP::Parser; use Test::Harness; __PACKAGE__->PassThroughArgs; -BEGIN { -} sub CTOR { my $this = shift; diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Web/AutoLocator.pm --- a/Lib/IMPL/Web/AutoLocator.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Web/AutoLocator.pm Tue Oct 09 20:12:47 2012 +0400 @@ -1,7 +1,8 @@ package IMPL::Web::AutoLocator; use strict; -use IMPL::lang qw(:constants :hash); +use IMPL::Const qw(:prop); +use IMPL::lang qw( :hash ); use URI; use URI::Escape; use IMPL::declare { @@ -15,10 +16,10 @@ 'IMPL::Object::Serializable' => '@_' ], props => [ - base => PROP_GET | PROP_OWNERSET, - view => PROP_ALL, - query => PROP_ALL, - hash => PROP_ALL + base => PROP_RO, + view => PROP_RW, + query => PROP_RW, + hash => PROP_RW ] }; diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Web/Security.pm --- a/Lib/IMPL/Web/Security.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Web/Security.pm Tue Oct 09 20:12:47 2012 +0400 @@ -26,16 +26,11 @@ }; } - my ($status,$answer) = $auth->DoAuth($challenge); - - if ($status != AUTH_FAIL) { - SecurityContext->current->authority->InitSession( - $user, - $auth, - [$user->roles], - $answer - ); - } + my $status = SecurityContext->current->authority->InitSession( + $user, + $auth, + [$user->roles] + ); return { status => $status, @@ -69,37 +64,32 @@ C Модуль для аутентификации и авторизации веб запроса. -=head1 SINOPSYS - -=begin code xml - - - IMPL::Web::Security - - - App::Data::Session - insert - - - - -=end code xml - =head1 DESCRIPTION -Отвечает за инфраструктуру аутентификации и авторизации запросов. Основная особенность -заключается в том, что запросы приходят через значительные интевалы времени, хотя и -относятся к одной логической транзакции. В промежутках между запросами сервер не -сохраняет свое состояние. Поэтому при каждом обращении сервер восстанавливает -контекст безопасности. +Текущий модуль обеспечивает функции верхнего уровня для работы с системой +безопасности. Поскольку модуль является абстрактым, конкретные функции +хранения и реализацию объектов модели безопасности должно обеспечить само +приложение. + +Сама система безопасности в веб приложении состоит из двух частей + +=over + +=item Модель системы безопасности -C Объект обеспечивающий сохранение состояния в рамках одной сессии -пользователя. Кроме контекста безопасности хранит дополнительние данные, которые необходимо -сохранить между обработкой запросов. +Предоставляет такие объкты безопасности, как пользователь, сессия роль, +определяет правила проверки прав доступа субъекта к объекту. + +=item Модуль безопасности -C Объект, устанавливающий связь между идентификатором пользователя -C, его ролями и данными безопасности для создания объектов -аутентификации C. +Как правило встраивается в транспортный уровеь в виде обработчика +C и реализует непосредственно протокол аутентификации и +обмена с пользователем. + +Также модуль безопасности использует модель для хранения сессий и данных +аутентификции. Контекст безопасности создается именно этим модулем. + +=back =head1 MEMBERS diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Web/View/TTControl.pm --- a/Lib/IMPL/Web/View/TTControl.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Web/View/TTControl.pm Tue Oct 09 20:12:47 2012 +0400 @@ -2,7 +2,7 @@ use strict; use IMPL::DOM::Property qw(_dom); -use IMPL::lang qw(:declare :constants); +use IMPL::lang qw(:declare ); use Template::Context(); use Scalar::Util qw(weaken); diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Web/View/TTDocument.pm --- a/Lib/IMPL/Web/View/TTDocument.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Web/View/TTDocument.pm Tue Oct 09 20:12:47 2012 +0400 @@ -1,7 +1,7 @@ package IMPL::Web::View::TTDocument; use strict; -use IMPL::lang qw(:declare :constants); +use IMPL::lang qw(:declare ); use IMPL::DOM::Property qw(_dom); use IMPL::Web::View::TTFactory(); use IMPL::Web::View::TTControl(); diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Web/View/TTFactory.pm --- a/Lib/IMPL/Web/View/TTFactory.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Web/View/TTFactory.pm Tue Oct 09 20:12:47 2012 +0400 @@ -3,7 +3,7 @@ use Template::Context(); -use IMPL::lang qw(:hash :declare :constants); +use IMPL::lang qw(:hash :declare ); use IMPL::Exception(); use Scalar::Util qw(weaken); diff -r ff1e8fa932f2 -r 5c82eec23bb6 Lib/IMPL/Web/View/TTLoader.pm --- a/Lib/IMPL/Web/View/TTLoader.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/Lib/IMPL/Web/View/TTLoader.pm Tue Oct 09 20:12:47 2012 +0400 @@ -1,7 +1,7 @@ package IMPL::Web::View::TTLoader; use strict; -use IMPL::lang qw(:declare :constants); +use IMPL::lang qw(:declare); use Template::Provider(); use Template::Context(); diff -r ff1e8fa932f2 -r 5c82eec23bb6 _test/Test/DOM/Builder.pm --- a/_test/Test/DOM/Builder.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/_test/Test/DOM/Builder.pm Tue Oct 09 20:12:47 2012 +0400 @@ -25,12 +25,12 @@ $schema->appendRange( IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange( IMPL::DOM::Schema::NodeSet->new()->appendRange( - new IMPL::DOM::Schema::SimpleNode( name => 'firstName' ), - new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ), - new IMPL::DOM::Schema::ComplexNode( name => 'address', maxOccur => 'unbounded' )->appendRange( + IMPL::DOM::Schema::SimpleNode->new( name => 'firstName' ), + IMPL::DOM::Schema::SimpleNode->new( name => 'lastName' ), + IMPL::DOM::Schema::ComplexNode->new( name => 'address', maxOccur => 'unbounded' )->appendRange( IMPL::DOM::Schema::NodeSet->new()->appendRange( - new IMPL::DOM::Schema::SimpleNode( name => 'street' ), - new IMPL::DOM::Schema::SimpleNode( name => 'line', minOccur => 0 ) + IMPL::DOM::Schema::SimpleNode->new( name => 'street' ), + IMPL::DOM::Schema::SimpleNode->new( name => 'line', minOccur => 0 ) ) ) ) diff -r ff1e8fa932f2 -r 5c82eec23bb6 _test/Test/DOM/Schema.pm --- a/_test/Test/DOM/Schema.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/_test/Test/DOM/Schema.pm Tue Oct 09 20:12:47 2012 +0400 @@ -35,12 +35,12 @@ $schema->appendRange( IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange( IMPL::DOM::Schema::NodeSet->new()->appendRange( - new IMPL::DOM::Schema::SimpleNode( name => 'firstName' ), - new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ), - new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange( + IMPL::DOM::Schema::SimpleNode->new( name => 'firstName' ), + IMPL::DOM::Schema::SimpleNode->new( name => 'lastName' ), + IMPL::DOM::Schema::ComplexNode->new( name => 'address' )->appendRange( IMPL::DOM::Schema::NodeSet->new()->appendRange( - new IMPL::DOM::Schema::SimpleNode( name => 'street' ), - new IMPL::DOM::Schema::SimpleNode( name => 'line', minOccur => 0 ) + IMPL::DOM::Schema::SimpleNode->new( name => 'street' ), + IMPL::DOM::Schema::SimpleNode->new( name => 'line', minOccur => 0 ) ) ) ) @@ -59,11 +59,11 @@ my $schema = new IMPL::DOM::Schema; $schema->appendRange( IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange( - new IMPL::DOM::Schema::ComplexType( type => 'someType' ), - new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ), - new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange( - new IMPL::DOM::Schema::SimpleNode( name => 'street' ), - new IMPL::DOM::Schema::SimpleNode( name => 'line' ) + IMPL::DOM::Schema::ComplexType->new( type => 'someType' ), + IMPL::DOM::Schema::SimpleNode->new( name => 'lastName' ), + IMPL::DOM::Schema::ComplexNode->new( name => 'address' )->appendRange( + IMPL::DOM::Schema::SimpleNode->new( name => 'street' ), + IMPL::DOM::Schema::SimpleNode->new( name => 'line' ) ) ) ); diff -r ff1e8fa932f2 -r 5c82eec23bb6 _test/Test/Web/AutoLocator.pm --- a/_test/Test/Web/AutoLocator.pm Tue Oct 09 03:09:41 2012 +0400 +++ b/_test/Test/Web/AutoLocator.pm Tue Oct 09 20:12:47 2012 +0400 @@ -1,7 +1,6 @@ package Test::Web::AutoLocator; use strict; -use IMPL::lang qw(:declare :constants); use IMPL::Test qw(test assert); use URI();