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