Mercurial > pub > Impl
diff Lib/IMPL/Security/Role.pm @ 230:6d8092d8ce1b
*reworked IMPL::Security
*reworked IMPL::Web::Security
*refactoring
author | sergey |
---|---|
date | Mon, 08 Oct 2012 03:37:37 +0400 |
parents | 4d0e1962161c |
children | 69a1f1508696 |
line wrap: on
line diff
--- a/Lib/IMPL/Security/Role.pm Sat Sep 29 02:34:47 2012 +0400 +++ b/Lib/IMPL/Security/Role.pm Mon Oct 08 03:37:37 2012 +0400 @@ -1,13 +1,22 @@ package IMPL::Security::Role; +use strict; -use parent qw(IMPL::Object); +use IMPL::require { + AbstractRole => 'IMPL::Security::AbstractRole' +}; -use IMPL::Class::Property; +use IMPL::declare { + base => [ + 'IMPL::Object' => undef, + 'IMPL::Security::AbstractRole' => undef + ], + props => [ + @{AbstractRole->abstractProps()} + ] +}; -BEGIN { - public property roleName => prop_get | owner_set; - public property parentRoles => prop_get | owner_set | prop_list; -} +__PACKAGE__->abstractProps([]); + sub CTOR { my ($this,$name,$parentRoles) = @_; @@ -16,24 +25,6 @@ $this->parentRoles($parentRoles) if $parentRoles; } -sub Satisfy { - my ($this,@roles) = @_; - - return 1 unless $this->_FilterRoles( @roles ); - return 0; -} - -sub _FilterRoles { - my ($this,@roles) = @_; - - @roles = grep not (ref $_ ? $this == $_ : $this->roleName eq $_), @roles; - - @roles = $_->_FilterRoles(@roles) or return foreach $this->parentRoles ; - - return @roles; -} - - 1; __END__ @@ -42,31 +33,33 @@ =head1 NAME -C<IMPL::Security::Role> Роль +C<IMPL::Security::Role> - стандартная реализация роли безопасности. + +=head1 SYNOPSIS + +=begin code + +# create the megarole +my $role = IMPL::Security::Role->new(megarole => [ $adminRole, $directorRole ] ); + +#use it in context +my $context = IMPL::Security::Context->new( + principal => $user, + assignedRoles => [$user->roles, $megarole] +); + +$context->Impersonate( sub { + # do something forbidden +}); + +=end code =head1 DESCRIPTION -Может включать в себя базовые роли. -Имеется метод для проверки наличия необходимых ролей в текущей роли. - -=head1 MEMBERS - -=over - -=item C<[get] roleName> - -Имя роли, ее идентификатор +Позволяет создавать объекты ролей без привязки к источникам данных и модулям +авторизации. Чаще всего используется при реализации каких либо механизмов +безопасности, где требуется создать временную роль. -=item C<[get,list] parentRoles> - -Список родительских ролей - -=item C<Satisfy(@roles_list)> +C<IMPL::Security::AbstractRole> -Проверяет наличие ролей указанных ролей из списка @roles_list. -Допускается использование как самих объектов, так и имен ролей. -Возвращает 0 в случае неудачи (хотябы одна роль не была удовлетворена), 1 при наличии необходимых ролей. - -=back - -=cut +=cut \ No newline at end of file