diff lib/IMPL/Security/Context.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/IMPL/Security/Context.pm	Fri Sep 04 19:40:23 2015 +0300
@@ -0,0 +1,113 @@
+package IMPL::Security::Context;
+use strict;
+use warnings;
+
+use IMPL::require {
+    AbstractContext => 'IMPL::Security::AbstractContext',
+};
+
+use IMPL::declare {
+    require => {
+        Principal => 'IMPL::Security::Principal',
+        Role => 'IMPL::Security::Role',
+        Exception => 'IMPL::Exception',
+        ArgumentException => '-IMPL::InvalidArgumentException'        
+    },
+    base => [
+        'IMPL::Object' => undef,
+        'IMPL::Object::Autofill' => '@_',
+        'IMPL::Security::AbstractContext' => undef,
+    ],
+    props => [
+        @{AbstractContext->abstractProps()}
+    ]
+};
+
+__PACKAGE__->abstractProps([]);
+
+
+my $nobody;
+
+sub CTOR {
+    my ($this) = @_;
+    
+    die ArgumentException->new("The parameter is required", 'principal') unless $this->principal;
+}
+
+sub nobody {
+    my ($self) = @_;
+    $nobody = $self->new(principal => Principal->nobody) unless $nobody;
+    $nobody;
+}
+
+sub isTrusted {
+    return 1;
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::Security::Context> - реализация контекста безопасности создаваемого в 
+приложении.
+
+=head1 SYNOPSIS
+
+=begin code
+
+my $context = IMPL::Security::Context->nobody;
+
+my $result = $context->Impersonate(
+    sub {
+        # do some untrusted code
+    }
+);
+
+$context = IMPL::Security::Context->new(
+    principal => $user,
+    assignedRoles => [
+        $backupRole,
+        $controlRole
+    ]
+);
+
+$context->Impersonate(
+    sub {
+        
+        # do some authorized operations
+        
+        $service->backupData('current.bak');
+        $service->stop();
+    }
+);
+
+=end code
+
+=head1 DESCRIPTION
+
+C<autofill>
+
+Данная реализация контекста безопасности не привязана ни к источнику данных
+ни к пакету аутентификации и авторизации, ее приложение может создать в любой
+момент, при этом система сама несет ответственность за последствия.
+
+Данный контекст нужен для выполнения системой служебных функций.
+
+=head1 MEMBERS
+
+см. также C<IMPL::Security::AbstractContext>.
+
+=head2 C<CTOR(%props)>
+
+Создает объект и заполняет его свойствами. C<principal> должен быть обязательно
+указан.
+
+=head2 C<[static,get] nobody>
+
+Контекст для неаутентифицированных пользователей, минимум прав.
+
+=cut