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 |
