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 |
