Mercurial > pub > Impl
diff 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 |
line wrap: on
line diff
--- a/Lib/IMPL/Security/Context.pm Mon Mar 29 06:56:05 2010 +0400 +++ b/Lib/IMPL/Security/Context.pm Mon Mar 29 17:40:06 2010 +0400 @@ -2,7 +2,9 @@ use strict; use warnings; -use base qw(IMPL::Object); +use base qw(IMPL::Object IMPL::Object::Autofill); + +__PACKAGE__->PassThroughArgs; use IMPL::Class::Property; @@ -17,6 +19,12 @@ public property auth => prop_all; } +sub CTOR { + my ($this) = @_; + + die new IMPL::InvalidArgumentException("The parameter is required", 'principal') unless $this->principal; +} + sub Impersonate { my ($this,$code) = @_; @@ -34,13 +42,13 @@ } } -sub contextNobody { +sub nobody { my ($self) = @_; $nobody = $self->new(principal => IMPL::Security::Principal->nobody, rolesAssigned => undef) unless $nobody; $nobody; } -sub contextCurrent { +sub current { my ($self) = @_; $current = __PACKAGE__->nobody unless $current; @@ -48,3 +56,69 @@ } 1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::Security::Context> - контекст безопасности. + +=head1 SINOPSYS + +=begin code + +my $context = IMPL::Security::Context->nobody; + +my $result = $context->Impersonate( + sub { + # do some untrusted code + } +); + +=end code + +=head1 DESCRIPTION + +C<[Autofill]> + +Являет собой контекст безопасности, описывает пользователя и привелегии, так же +у потока есть текущий контекст безопасности, по умолчанию он C<nobody>. + +=head1 MEMBERS + +=over + +=item C<CTOR(%props)> + +Создает объект и заполняет его свойствами. + +=item C<[get] principal> + +Идентификатор пользователя, владельца контекста. + +=item C<[get] rolesAssigned> + +Список назначенных (активных) ролей пользователю. + +=item C<[get] auth> + +Объект асторизации C<IMPL::Security::Auth>, использованный при создании текущего контекста. + +=item C<Impersonate($code)> + +Делает контекст текущим и выполняет в нем функцию по ссылке C<$code>. По окончании +выполнения, контекст восстанавливается. + +=item C<[static,get] nobody> + +Контекст для неаутентифицированных пользователей, минимум прав. + +=item C<[static,get] current> + +Текущий контекст. + +=back + +=cut \ No newline at end of file