annotate Lib/IMPL/Web/Security.pm @ 231:ff1e8fa932f2

sync
author sergey
date Tue, 09 Oct 2012 03:09:41 +0400
parents 6d8092d8ce1b
children 5c82eec23bb6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
1 package IMPL::Web::Security;
81
077357224bec IMPL::Web::Security alpha version
Sergey
parents: 79
diff changeset
2 use strict;
73
wizard
parents: 66
diff changeset
3
81
077357224bec IMPL::Web::Security alpha version
Sergey
parents: 79
diff changeset
4 use IMPL::Security::Auth qw(:Const);
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
5 use IMPL::declare {
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
6 require => {
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
7 Exception => 'IMPL::Exception',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
8 NotImplementedException => '-IMPL::NotImplementedException',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
9 SecurityContext => 'IMPL::Security::AbstractContext'
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
10 },
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
11 };
107
0e72ad99eef7 Updated Web::TT
wizard
parents: 97
diff changeset
12
81
077357224bec IMPL::Web::Security alpha version
Sergey
parents: 79
diff changeset
13 sub AuthUser {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
14 my ($this,$name,$package,$challenge) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
15
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
16 my $user = $this->FindUserByName($name)
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
17 or return { status => AUTH_FAIL, answer => "Can't find a user '$name'" };
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
18
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
19 my $auth;
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
20 if ( my $secData = $user->GetSecData($package) ) {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
21 $auth = $package->new($secData);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
22 } else {
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
23 return {
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
24 status => AUTH_FAIL,
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
25 user => $user
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
26 };
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
27 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
28
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
29 my ($status,$answer) = $auth->DoAuth($challenge);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
30
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
31 if ($status != AUTH_FAIL) {
231
sergey
parents: 230
diff changeset
32 SecurityContext->current->authority->InitSession(
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
33 $user,
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
34 $auth,
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
35 [$user->roles],
231
sergey
parents: 230
diff changeset
36 $answer
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
37 );
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
38 }
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
39
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
40 return {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
41 status => $status,
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
42 user => $user
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
43 };
73
wizard
parents: 66
diff changeset
44 }
wizard
parents: 66
diff changeset
45
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
46 sub FindUserByName {
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
47 die NotImplementedException->new();
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
48 }
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
49
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
50 sub CreateSession {
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
51 die NotImplementedException->new();
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
52 }
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
53
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
54 sub GetSession {
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
55 die NotImplementedException->new();
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
56 }
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
57
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
58 sub SaveSession {
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
59 die NotImplementedException->new();
73
wizard
parents: 66
diff changeset
60 }
wizard
parents: 66
diff changeset
61
52
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
62 1;
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
63
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
64 __END__
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
65
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
66 =pod
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
67
73
wizard
parents: 66
diff changeset
68 =head1 NAME
wizard
parents: 66
diff changeset
69
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
70 C<IMPL::Web::Security> Модуль для аутентификации и авторизации веб запроса.
73
wizard
parents: 66
diff changeset
71
wizard
parents: 66
diff changeset
72 =head1 SINOPSYS
wizard
parents: 66
diff changeset
73
wizard
parents: 66
diff changeset
74 =begin code xml
wizard
parents: 66
diff changeset
75
wizard
parents: 66
diff changeset
76 <security type='IMPL::Config::Activator'>
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
77 <factory>IMPL::Web::Security</factory>
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
78 <parameters type='HASH'>
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
79 <sessionFactory type='IMPL::Object::Factory'>
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
80 <factory type='IMPL::Object::Factory'>App::Data::Session</factory>
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
81 <method>insert</method>
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
82 </sessionFactory>
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
83 </parameters>
73
wizard
parents: 66
diff changeset
84 </security>
wizard
parents: 66
diff changeset
85
wizard
parents: 66
diff changeset
86 =end code xml
wizard
parents: 66
diff changeset
87
52
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
88 =head1 DESCRIPTION
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
89
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
90 Отвечает за инфраструктуру аутентификации и авторизации запросов. Основная особенность
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
91 заключается в том, что запросы приходят через значительные интевалы времени, хотя и
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
92 относятся к одной логической транзакции. В промежутках между запросами сервер не
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
93 сохраняет свое состояние. Поэтому при каждом обращении сервер восстанавливает
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
94 контекст безопасности.
52
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
95
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
96 C<IMPL::Web::Security::Session> Объект обеспечивающий сохранение состояния в рамках одной сессии
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
97 пользователя. Кроме контекста безопасности хранит дополнительние данные, которые необходимо
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
98 сохранить между обработкой запросов.
52
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
99
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
100 C<IMPL::Web::Security::User> Объект, устанавливающий связь между идентификатором пользователя
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
101 C<IMPL::Security::Principal>, его ролями и данными безопасности для создания объектов
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
102 аутентификации C<IMPL::Security::Auth>.
52
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
103
73
wizard
parents: 66
diff changeset
104 =head1 MEMBERS
52
15d720913562 security in work
wizard@linux-odin.local
parents:
diff changeset
105
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
106 =cut