Mercurial > pub > Impl
view Lib/IMPL/Security/Context.pm @ 123:1d7e370a91fa
Additional DOM::Node tests
author | wizard |
---|---|
date | Wed, 09 Jun 2010 17:53:12 +0400 (2010-06-09) |
parents | 92c850d0bdb9 |
children | a9f4ba4783eb |
line wrap: on
line source
package IMPL::Security::Context; use strict; use warnings; use base qw(IMPL::Object IMPL::Object::Autofill); __PACKAGE__->PassThroughArgs; use IMPL::Class::Property; require IMPL::Security::Principal; my $current; my $nobody; BEGIN { public property principal => prop_get; public property rolesAssigned => prop_all | prop_list; public property auth => prop_all; public property authority => prop_all; } sub CTOR { my ($this) = @_; die new IMPL::InvalidArgumentException("The parameter is required", 'principal') unless $this->principal; } sub Impersonate { my ($this,$code) = @_; my $old = $current; $current = $this; my $result; my $e; { local $@; eval { $result = $code->(); }; $e = $@; } $current = $old; if($e) { die $e; } else { return $result; } } sub Apply { my ($this) = @_; $current = $this; } sub isTrusted { my ($this) = @_; if (my $auth = $this->auth) { return $auth->isTrusted; } else { return 0; } } sub nobody { my ($self) = @_; $nobody = $self->new(principal => IMPL::Security::Principal->nobody, rolesAssigned => undef) unless $nobody; $nobody; } sub current { my ($self) = @_; $current = __PACKAGE__->nobody unless $current; $current; } sub Satisfy { my ($this,@roles) = @_; my $roleEffective = new IMPL::Security::Role ( _effective => $this->rolesAssigned ); return $roleEffective->Satisfy(@roles); } 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<[static,get] authority> �������� ������ ������������, ���������� ������ ��������. =item C<[get] isTrusted> ���������� �������� �������� �� �������� ����������, ������ ������ ����������������. =item C<Impersonate($code)> ������ �������� ������� � ��������� � ��� ������� �� ������ C<$code>. �� ��������� ����������, �������� �����������������. =item C<Apply()> �������� ������� �������� �� ����, �� �� ����� �������� ������ C<Impersonate>, ���� ������� ��� ������. =item C<[static,get] nobody> �������� ��� ��������������������� �������������, ������� ����. =item C<[static,get] current> ������� ��������. =back =cut