407
|
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
|