Mercurial > pub > Impl
comparison Lib/IMPL/Security/Context.pm @ 74:84aa8c395fce
doc
minor fixes
author | wizard |
---|---|
date | Mon, 29 Mar 2010 17:40:06 +0400 |
parents | 739f1288ca84 |
children | 077357224bec |
comparison
equal
deleted
inserted
replaced
73:2f31ecabe9ea | 74:84aa8c395fce |
---|---|
1 package IMPL::Security::Context; | 1 package IMPL::Security::Context; |
2 use strict; | 2 use strict; |
3 use warnings; | 3 use warnings; |
4 | 4 |
5 use base qw(IMPL::Object); | 5 use base qw(IMPL::Object IMPL::Object::Autofill); |
6 | |
7 __PACKAGE__->PassThroughArgs; | |
6 | 8 |
7 use IMPL::Class::Property; | 9 use IMPL::Class::Property; |
8 | 10 |
9 require IMPL::Security::Principal; | 11 require IMPL::Security::Principal; |
10 | 12 |
13 | 15 |
14 BEGIN { | 16 BEGIN { |
15 public property principal => prop_get; | 17 public property principal => prop_get; |
16 public property rolesAssigned => prop_all | prop_list; | 18 public property rolesAssigned => prop_all | prop_list; |
17 public property auth => prop_all; | 19 public property auth => prop_all; |
20 } | |
21 | |
22 sub CTOR { | |
23 my ($this) = @_; | |
24 | |
25 die new IMPL::InvalidArgumentException("The parameter is required", 'principal') unless $this->principal; | |
18 } | 26 } |
19 | 27 |
20 sub Impersonate { | 28 sub Impersonate { |
21 my ($this,$code) = @_; | 29 my ($this,$code) = @_; |
22 | 30 |
32 } else { | 40 } else { |
33 return $result; | 41 return $result; |
34 } | 42 } |
35 } | 43 } |
36 | 44 |
37 sub contextNobody { | 45 sub nobody { |
38 my ($self) = @_; | 46 my ($self) = @_; |
39 $nobody = $self->new(principal => IMPL::Security::Principal->nobody, rolesAssigned => undef) unless $nobody; | 47 $nobody = $self->new(principal => IMPL::Security::Principal->nobody, rolesAssigned => undef) unless $nobody; |
40 $nobody; | 48 $nobody; |
41 } | 49 } |
42 | 50 |
43 sub contextCurrent { | 51 sub current { |
44 my ($self) = @_; | 52 my ($self) = @_; |
45 | 53 |
46 $current = __PACKAGE__->nobody unless $current; | 54 $current = __PACKAGE__->nobody unless $current; |
47 $current; | 55 $current; |
48 } | 56 } |
49 | 57 |
50 1; | 58 1; |
59 | |
60 __END__ | |
61 | |
62 =pod | |
63 | |
64 =head1 NAME | |
65 | |
66 C<IMPL::Security::Context> - контекст безопасности. | |
67 | |
68 =head1 SINOPSYS | |
69 | |
70 =begin code | |
71 | |
72 my $context = IMPL::Security::Context->nobody; | |
73 | |
74 my $result = $context->Impersonate( | |
75 sub { | |
76 # do some untrusted code | |
77 } | |
78 ); | |
79 | |
80 =end code | |
81 | |
82 =head1 DESCRIPTION | |
83 | |
84 C<[Autofill]> | |
85 | |
86 Являет собой контекст безопасности, описывает пользователя и привелегии, так же | |
87 у потока есть текущий контекст безопасности, по умолчанию он C<nobody>. | |
88 | |
89 =head1 MEMBERS | |
90 | |
91 =over | |
92 | |
93 =item C<CTOR(%props)> | |
94 | |
95 Создает объект и заполняет его свойствами. | |
96 | |
97 =item C<[get] principal> | |
98 | |
99 Идентификатор пользователя, владельца контекста. | |
100 | |
101 =item C<[get] rolesAssigned> | |
102 | |
103 Список назначенных (активных) ролей пользователю. | |
104 | |
105 =item C<[get] auth> | |
106 | |
107 Объект асторизации C<IMPL::Security::Auth>, использованный при создании текущего контекста. | |
108 | |
109 =item C<Impersonate($code)> | |
110 | |
111 Делает контекст текущим и выполняет в нем функцию по ссылке C<$code>. По окончании | |
112 выполнения, контекст восстанавливается. | |
113 | |
114 =item C<[static,get] nobody> | |
115 | |
116 Контекст для неаутентифицированных пользователей, минимум прав. | |
117 | |
118 =item C<[static,get] current> | |
119 | |
120 Текущий контекст. | |
121 | |
122 =back | |
123 | |
124 =cut |