Mercurial > pub > Impl
comparison lib/IMPL/Security/Context.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
author | cin |
---|---|
date | Fri, 04 Sep 2015 19:40:23 +0300 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
406:f23fcb19d3c1 | 407:c6e90e02dd17 |
---|---|
1 package IMPL::Security::Context; | |
2 use strict; | |
3 use warnings; | |
4 | |
5 use IMPL::require { | |
6 AbstractContext => 'IMPL::Security::AbstractContext', | |
7 }; | |
8 | |
9 use IMPL::declare { | |
10 require => { | |
11 Principal => 'IMPL::Security::Principal', | |
12 Role => 'IMPL::Security::Role', | |
13 Exception => 'IMPL::Exception', | |
14 ArgumentException => '-IMPL::InvalidArgumentException' | |
15 }, | |
16 base => [ | |
17 'IMPL::Object' => undef, | |
18 'IMPL::Object::Autofill' => '@_', | |
19 'IMPL::Security::AbstractContext' => undef, | |
20 ], | |
21 props => [ | |
22 @{AbstractContext->abstractProps()} | |
23 ] | |
24 }; | |
25 | |
26 __PACKAGE__->abstractProps([]); | |
27 | |
28 | |
29 my $nobody; | |
30 | |
31 sub CTOR { | |
32 my ($this) = @_; | |
33 | |
34 die ArgumentException->new("The parameter is required", 'principal') unless $this->principal; | |
35 } | |
36 | |
37 sub nobody { | |
38 my ($self) = @_; | |
39 $nobody = $self->new(principal => Principal->nobody) unless $nobody; | |
40 $nobody; | |
41 } | |
42 | |
43 sub isTrusted { | |
44 return 1; | |
45 } | |
46 | |
47 1; | |
48 | |
49 __END__ | |
50 | |
51 =pod | |
52 | |
53 =head1 NAME | |
54 | |
55 C<IMPL::Security::Context> - реализация контекста безопасности создаваемого в | |
56 приложении. | |
57 | |
58 =head1 SYNOPSIS | |
59 | |
60 =begin code | |
61 | |
62 my $context = IMPL::Security::Context->nobody; | |
63 | |
64 my $result = $context->Impersonate( | |
65 sub { | |
66 # do some untrusted code | |
67 } | |
68 ); | |
69 | |
70 $context = IMPL::Security::Context->new( | |
71 principal => $user, | |
72 assignedRoles => [ | |
73 $backupRole, | |
74 $controlRole | |
75 ] | |
76 ); | |
77 | |
78 $context->Impersonate( | |
79 sub { | |
80 | |
81 # do some authorized operations | |
82 | |
83 $service->backupData('current.bak'); | |
84 $service->stop(); | |
85 } | |
86 ); | |
87 | |
88 =end code | |
89 | |
90 =head1 DESCRIPTION | |
91 | |
92 C<autofill> | |
93 | |
94 Данная реализация контекста безопасности не привязана ни к источнику данных | |
95 ни к пакету аутентификации и авторизации, ее приложение может создать в любой | |
96 момент, при этом система сама несет ответственность за последствия. | |
97 | |
98 Данный контекст нужен для выполнения системой служебных функций. | |
99 | |
100 =head1 MEMBERS | |
101 | |
102 см. также C<IMPL::Security::AbstractContext>. | |
103 | |
104 =head2 C<CTOR(%props)> | |
105 | |
106 Создает объект и заполняет его свойствами. C<principal> должен быть обязательно | |
107 указан. | |
108 | |
109 =head2 C<[static,get] nobody> | |
110 | |
111 Контекст для неаутентифицированных пользователей, минимум прав. | |
112 | |
113 =cut |