Mercurial > pub > Impl
comparison lib/IMPL/Security/AbstractRole.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
| author | cin |
|---|---|
| date | Fri, 04 Sep 2015 19:40:23 +0300 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 406:f23fcb19d3c1 | 407:c6e90e02dd17 |
|---|---|
| 1 package IMPL::Security::AbstractRole; | |
| 2 use strict; | |
| 3 | |
| 4 use IMPL::Const qw(:prop); | |
| 5 use IMPL::lang qw(equals_s); | |
| 6 use parent qw(IMPL::Class::Meta); | |
| 7 | |
| 8 __PACKAGE__->static_accessor_clone( abstractProps => [ | |
| 9 roleName => PROP_RW, | |
| 10 parentRoles => PROP_RW | PROP_LIST | |
| 11 ]); | |
| 12 | |
| 13 sub Satisfy { | |
| 14 my ($this,@roles) = @_; | |
| 15 | |
| 16 return 1 unless $this->_FilterRoles( @roles ); | |
| 17 return 0; | |
| 18 } | |
| 19 | |
| 20 sub _FilterRoles { | |
| 21 my ($this,@roles) = @_; | |
| 22 | |
| 23 @roles = grep not (ref $_ ? equals_s($this->roleName,$_->roleName) : equals_s($this->roleName, $_) ), @roles; | |
| 24 | |
| 25 @roles = $_->_FilterRoles(@roles) or return foreach $this->parentRoles ; | |
| 26 | |
| 27 return @roles; | |
| 28 } | |
| 29 | |
| 30 1; | |
| 31 | |
| 32 __END__ | |
| 33 | |
| 34 =pod | |
| 35 | |
| 36 =head1 NAME | |
| 37 | |
| 38 C<IMPL::Security::Role> Роль | |
| 39 | |
| 40 =head1 DESCRIPTION | |
| 41 | |
| 42 Может включать в себя базовые роли. | |
| 43 Имеется метод для проверки наличия необходимых ролей в текущей роли. | |
| 44 | |
| 45 =head1 MEMBERS | |
| 46 | |
| 47 =over | |
| 48 | |
| 49 =item C<[get] roleName> | |
| 50 | |
| 51 Имя роли, ее идентификатор | |
| 52 | |
| 53 =item C<[get,list] parentRoles> | |
| 54 | |
| 55 Список родительских ролей | |
| 56 | |
| 57 =item C<Satisfy(@roles_list)> | |
| 58 | |
| 59 Проверяет наличие ролей указанных ролей из списка @roles_list. | |
| 60 Допускается использование как самих объектов, так и имен ролей. | |
| 61 Возвращает 0 в случае неудачи (хотябы одна роль не была удовлетворена), 1 при наличии необходимых ролей. | |
| 62 | |
| 63 =back | |
| 64 | |
| 65 =cut |
