Mercurial > pub > Impl
changeset 232:5c82eec23bb6
Fixed degradations due refactoring
author | sergey |
---|---|
date | Tue, 09 Oct 2012 20:12:47 +0400 |
parents | ff1e8fa932f2 |
children | 3cebcf6fdb9b |
files | Lib/IMPL/DOM/Schema.pm Lib/IMPL/Exception.pm Lib/IMPL/Object/Factory.pm Lib/IMPL/SQL/Schema.pm Lib/IMPL/SQL/Schema/Column.pm Lib/IMPL/SQL/Schema/Constraint.pm Lib/IMPL/SQL/Schema/Constraint/ForeignKey.pm Lib/IMPL/SQL/Schema/Table.pm Lib/IMPL/SQL/Schema/Type.pm Lib/IMPL/Test/HarnessRunner.pm Lib/IMPL/Web/AutoLocator.pm Lib/IMPL/Web/Security.pm Lib/IMPL/Web/View/TTControl.pm Lib/IMPL/Web/View/TTDocument.pm Lib/IMPL/Web/View/TTFactory.pm Lib/IMPL/Web/View/TTLoader.pm _test/Test/DOM/Builder.pm _test/Test/DOM/Schema.pm _test/Test/Web/AutoLocator.pm |
diffstat | 19 files changed, 84 insertions(+), 86 deletions(-) [+] |
line wrap: on
line diff
--- 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(
--- 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;
--- 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 {
--- 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
--- 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();
--- 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);
--- 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);
--- 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
--- 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;
--- 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;
--- 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 ] };
--- 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<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 -Отвечает за инфраструктуру аутентификации и авторизации запросов. Основная особенность -заключается в том, что запросы приходят через значительные интевалы времени, хотя и -относятся к одной логической транзакции. В промежутках между запросами сервер не -сохраняет свое состояние. Поэтому при каждом обращении сервер восстанавливает -контекст безопасности. +Текущий модуль обеспечивает функции верхнего уровня для работы с системой +безопасности. Поскольку модуль является абстрактым, конкретные функции +хранения и реализацию объектов модели безопасности должно обеспечить само +приложение. + +Сама система безопасности в веб приложении состоит из двух частей + +=over + +=item Модель системы безопасности -C<IMPL::Web::Security::Session> Объект обеспечивающий сохранение состояния в рамках одной сессии -пользователя. Кроме контекста безопасности хранит дополнительние данные, которые необходимо -сохранить между обработкой запросов. +Предоставляет такие объкты безопасности, как пользователь, сессия роль, +определяет правила проверки прав доступа субъекта к объекту. + +=item Модуль безопасности -C<IMPL::Web::Security::User> Объект, устанавливающий связь между идентификатором пользователя -C<IMPL::Security::Principal>, его ролями и данными безопасности для создания объектов -аутентификации C<IMPL::Security::Auth>. +Как правило встраивается в транспортный уровеь в виде обработчика +C<IMPL::Web::Handler> и реализует непосредственно протокол аутентификации и +обмена с пользователем. + +Также модуль безопасности использует модель для хранения сессий и данных +аутентификции. Контекст безопасности создается именно этим модулем. + +=back =head1 MEMBERS
--- 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);
--- 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();
--- 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);
--- 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();
--- 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 ) ) ) )
--- 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' ) ) ) );