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