Mercurial > pub > Impl
diff Lib/IMPL/Web/Application/Action.pm @ 52:15d720913562
security in work
author | wizard@linux-odin.local |
---|---|
date | Tue, 02 Mar 2010 20:12:02 +0300 |
parents | |
children | 609b59c9f03c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Web/Application/Action.pm Tue Mar 02 20:12:02 2010 +0300 @@ -0,0 +1,66 @@ +package IMPL::Web::Application::Action; + +use base qw(IMPL::Object); + +use IMPL::Class::Property; + +BEGIN { + public property application => prop_get | owner_set; + public property request => prop_get | owner_set; + public property response => prop_get | owner_set; + public property code => prop_get | owner_set; + public property chainHandlers => prop_get | owner_set | prop_list; +} + +1; + +__END__ + +=pod + +=head1 DESCRIPTION + +Определяет порядок выполнения запроса, форматирует результат, инициализирует контекст. + +Объект создается обработчиком запросов, таким как C<IMPL::Web::Application::UriController>. +При этом формируется цепочка обработчиков запроса, эта цапочка будет выполняться с последнего добавленного, +причем каждый добавленный обработчик в качестве одного из параметров получает не только текущий запрос, +но и предыдущий обработчик. + +Типичная цепочка может быть такой, в порядке добавления + +$objSecCallToMethod($target,$method) +$AuthenticateMethod +$TDocumentOut($file) + +что приведет к следующей последовательности + +Action->Invoke() { + TDocumentOut->Invoke($Action,$nextHandler) { + my $result = $nextHandler() { + $AuthenticateMethod($Action,$nextHandler) { + my $context = $Action->application->security->Authenticate($Action->request,$Action->response); + return $context->Impersonate($nextHandler) { + $objSecCallToMethod->Invoke($Action,undef) { + IMPL::Security->AccessCheck($target,$method); + return $target->$method(); + } + } + } + } + $this->format($result,$Action->response->streamBody); + } +} + +или как альтернатива может быть еще + +$objSecCallToMethod($target,$method) +$AuthenticateMethod +$TransfromToSimpleData +$JSONOut + +В данной цепочке также происходит вызов метода, но его результат потом преобразуется +в простые структуры и передается JSON преобразователю. Таким образом модулю логики +не требуется знать о выходном формате, всю работу проделают дополнительные фильтры. + +=cut \ No newline at end of file