comparison Lib/IMPL/Security.pm @ 66:f47f93534005

Documentation
author wizard
date Thu, 18 Mar 2010 17:58:33 +0300
parents a1498298d3ee
children 2f31ecabe9ea
comparison
equal deleted inserted replaced
65:2840c4c85db8 66:f47f93534005
14 $_->() or return 0 foreach @{$self->Rules}; 14 $_->() or return 0 foreach @{$self->Rules};
15 15
16 return 1; 16 return 1;
17 } 17 }
18 18
19 sub Take {
20 my ($self,$principal,$refRoles) = @_;
21
22 die new IMPL::NotImplementedException();
23 }
24
19 sub Rules { 25 sub Rules {
20 return \@rules; 26 return \@rules;
21 } 27 }
22 28
23 1; 29 1;
24 30
25 __END__ 31 __END__
26 32
27 =pod 33 =pod
34
35 =head1 NAME
36
37 C<IMPL::Security> - Модуль для работы с функциями авторизации и аутентификации.
38
39 =head1 SINOPSYS
40
41 =begin code
42
43 use IMPL::Security;
44
45 my Method {
46 my $this = shift;
47
48 # access check in the current context, using standard configuration
49 IMPL::Security->AccessCheck($this,'Method') or die new IMPL::AccessDeniedException("Access is denied");
50
51 #some more results
52 }
53
54 my DelegationMethod {
55
56 my $this = shift;
57
58 #forced delegation
59 my $delegatedContext = IMPL::Security::Context->new(
60 Principal => IMPL::Security::Principal->new(
61 Name => 'suser'
62 ),
63 AssignedRoles => ['administrator']
64 )
65
66 my $result;
67
68 $delegatedContext->Impersonate(sub{
69 $result = $this->Method();
70 });
71
72 return $result;
73 }
74
75 my SafeDelegationMethod {
76
77 my $this = shift;
78
79 my $delegatedContext = IMPL::Security->Take( suser => 'administrator' );
80
81 my $result;
82
83 $delegatedContext->Impersonate(sub{
84 $result = $this->Method();
85 });
86
87 return $result;
88 }
89
90 =end code
28 91
29 =head1 DESCRIPTION 92 =head1 DESCRIPTION
30 93
31 Модуль для инфраструктуры безопасности, реализует основные функции для авторизации 94 Модуль для инфраструктуры безопасности, реализует основные функции для авторизации
32 и аутентификации пользователей. 95 и аутентификации пользователей.
36 идентификатор пользователя и список активных ролей. 99 идентификатор пользователя и список активных ролей.
37 100
38 При проверке прав доступа происходит последовательная проверка правил доступа, 101 При проверке прав доступа происходит последовательная проверка правил доступа,
39 если все правила выполнены, то доступ разрешается. 102 если все правила выполнены, то доступ разрешается.
40 103
104 =head1 MEMBERS
41 105
106 =over
107
108 =item C<AccessCheck($object,$desiredAccess,$context)>
109
110 Метод. Проверка доступа к объекту с определенными правами, в определенном контексте безопасности.
111
112 =over
113
114 =item C<$object>
115
116 Объект доступа.
117
118 =item C<$desiredAccess>
119
120 Требуемые права доступа.
121
122 =item C<$context>
123
124 Контекст безопасности, если не указан, то используется текущий C<< IMPL::Security::Context->contextCurrent >>
125
126 =item C<returns>
127
128 C<true | false> - результат проверки
129
130 =back
131
132 =item C<Take($principal,$role)>
133
134 Метод. Делегирует текущему пользователю полномочия другого пользователя. При этом выполняется проверка
135 правомерности такой операции. В случае неудачи вызывается исключение.
136
137 =over
138
139 =item C<$principal>
140
141 Либо имя пользователя либо объект C<IMPL::Security::Principal>.
142
143 =item C<$role>
144
145 Либо имя либо ссылка на роль, или ссылка на массив либо имен, либо ролей.
146
147 =item C<returns>
148
149 Новый контекст безопасности.
150
151 =back
152
153 =item C<Roles()>
154
155 Возвращает список правил которые выполняются при проверках доступа. Пререопределите этот
156 метод, чтобы возвращать собственный список правил. Список правил является ссылкой на массив
157 элементами которого являются функции.
158
159 =begin code
160
161 package MySecurity;
162
163 use base qw(IMPL::Security);
164
165 sub Rules {
166 return [
167 \&Rule1,
168 \&Rule2,
169 #...
170 ]
171 }
172
173 =end code
174
175 =back
42 176
43 =cut 177 =cut