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