comparison Lib/IMPL/Security/AbstractRole.pm @ 230:6d8092d8ce1b

*reworked IMPL::Security *reworked IMPL::Web::Security *refactoring
author sergey
date Mon, 08 Oct 2012 03:37:37 +0400
parents
children 69a1f1508696
comparison
equal deleted inserted replaced
229:47f77e6409f7 230:6d8092d8ce1b
1 package IMPL::Security::AbstractRole;
2 use strict;
3
4 use IMPL::Const qw(:prop);
5
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 $_ ? $this->roleName eq $_->roleName : $this->roleName eq $_), @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