Mercurial > pub > Impl
comparison 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 |
comparison
equal
deleted
inserted
replaced
51:a1498298d3ee | 52:15d720913562 |
---|---|
1 package IMPL::Web::Application::Action; | |
2 | |
3 use base qw(IMPL::Object); | |
4 | |
5 use IMPL::Class::Property; | |
6 | |
7 BEGIN { | |
8 public property application => prop_get | owner_set; | |
9 public property request => prop_get | owner_set; | |
10 public property response => prop_get | owner_set; | |
11 public property code => prop_get | owner_set; | |
12 public property chainHandlers => prop_get | owner_set | prop_list; | |
13 } | |
14 | |
15 1; | |
16 | |
17 __END__ | |
18 | |
19 =pod | |
20 | |
21 =head1 DESCRIPTION | |
22 | |
23 Определяет порядок выполнения запроса, форматирует результат, инициализирует контекст. | |
24 | |
25 Объект создается обработчиком запросов, таким как C<IMPL::Web::Application::UriController>. | |
26 При этом формируется цепочка обработчиков запроса, эта цапочка будет выполняться с последнего добавленного, | |
27 причем каждый добавленный обработчик в качестве одного из параметров получает не только текущий запрос, | |
28 но и предыдущий обработчик. | |
29 | |
30 Типичная цепочка может быть такой, в порядке добавления | |
31 | |
32 $objSecCallToMethod($target,$method) | |
33 $AuthenticateMethod | |
34 $TDocumentOut($file) | |
35 | |
36 что приведет к следующей последовательности | |
37 | |
38 Action->Invoke() { | |
39 TDocumentOut->Invoke($Action,$nextHandler) { | |
40 my $result = $nextHandler() { | |
41 $AuthenticateMethod($Action,$nextHandler) { | |
42 my $context = $Action->application->security->Authenticate($Action->request,$Action->response); | |
43 return $context->Impersonate($nextHandler) { | |
44 $objSecCallToMethod->Invoke($Action,undef) { | |
45 IMPL::Security->AccessCheck($target,$method); | |
46 return $target->$method(); | |
47 } | |
48 } | |
49 } | |
50 } | |
51 $this->format($result,$Action->response->streamBody); | |
52 } | |
53 } | |
54 | |
55 или как альтернатива может быть еще | |
56 | |
57 $objSecCallToMethod($target,$method) | |
58 $AuthenticateMethod | |
59 $TransfromToSimpleData | |
60 $JSONOut | |
61 | |
62 В данной цепочке также происходит вызов метода, но его результат потом преобразуется | |
63 в простые структуры и передается JSON преобразователю. Таким образом модулю логики | |
64 не требуется знать о выходном формате, всю работу проделают дополнительные фильтры. | |
65 | |
66 =cut |