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 |