Mercurial > pub > Impl
diff Lib/IMPL/Security.pm @ 66:f47f93534005
Documentation
author | wizard |
---|---|
date | Thu, 18 Mar 2010 17:58:33 +0300 |
parents | a1498298d3ee |
children | 2f31ecabe9ea |
line wrap: on
line diff
--- a/Lib/IMPL/Security.pm Tue Mar 16 17:36:13 2010 +0300 +++ b/Lib/IMPL/Security.pm Thu Mar 18 17:58:33 2010 +0300 @@ -16,6 +16,12 @@ return 1; } +sub Take { + my ($self,$principal,$refRoles) = @_; + + die new IMPL::NotImplementedException(); +} + sub Rules { return \@rules; } @@ -26,6 +32,63 @@ =pod +=head1 NAME + +C<IMPL::Security> - Модуль для работы с функциями авторизации и аутентификации. + +=head1 SINOPSYS + +=begin code + +use IMPL::Security; + +my Method { + my $this = shift; + + # access check in the current context, using standard configuration + IMPL::Security->AccessCheck($this,'Method') or die new IMPL::AccessDeniedException("Access is denied"); + + #some more results +} + +my DelegationMethod { + + my $this = shift; + + #forced delegation + my $delegatedContext = IMPL::Security::Context->new( + Principal => IMPL::Security::Principal->new( + Name => 'suser' + ), + AssignedRoles => ['administrator'] + ) + + my $result; + + $delegatedContext->Impersonate(sub{ + $result = $this->Method(); + }); + + return $result; +} + +my SafeDelegationMethod { + + my $this = shift; + + my $delegatedContext = IMPL::Security->Take( suser => 'administrator' ); + + my $result; + + $delegatedContext->Impersonate(sub{ + $result = $this->Method(); + }); + + return $result; +} + +=end code + =head1 DESCRIPTION Модуль для инфраструктуры безопасности, реализует основные функции для авторизации @@ -38,6 +101,77 @@ При проверке прав доступа происходит последовательная проверка правил доступа, если все правила выполнены, то доступ разрешается. +=head1 MEMBERS +=over + +=item C<AccessCheck($object,$desiredAccess,$context)> + +Метод. Проверка доступа к объекту с определенными правами, в определенном контексте безопасности. + +=over + +=item C<$object> + +Объект доступа. + +=item C<$desiredAccess> + +Требуемые права доступа. + +=item C<$context> + +Контекст безопасности, если не указан, то используется текущий C<< IMPL::Security::Context->contextCurrent >> + +=item C<returns> + +C<true | false> - результат проверки + +=back + +=item C<Take($principal,$role)> + +Метод. Делегирует текущему пользователю полномочия другого пользователя. При этом выполняется проверка +правомерности такой операции. В случае неудачи вызывается исключение. + +=over + +=item C<$principal> + +Либо имя пользователя либо объект C<IMPL::Security::Principal>. + +=item C<$role> + +Либо имя либо ссылка на роль, или ссылка на массив либо имен, либо ролей. + +=item C<returns> + +Новый контекст безопасности. + +=back + +=item C<Roles()> + +Возвращает список правил которые выполняются при проверках доступа. Пререопределите этот +метод, чтобы возвращать собственный список правил. Список правил является ссылкой на массив +элементами которого являются функции. + +=begin code + +package MySecurity; + +use base qw(IMPL::Security); + +sub Rules { + return [ + \&Rule1, + \&Rule2, + #... + ] +} + +=end code + +=back =cut \ No newline at end of file