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