comparison Lib/IMPL/Security/Role.pm @ 51:a1498298d3ee

Security in progress
author wizard@linux-odin.local
date Mon, 01 Mar 2010 17:25:36 +0300
parents
children 2f31ecabe9ea
comparison
equal deleted inserted replaced
50:521c9c1a3ea1 51:a1498298d3ee
1 package IMPL::Security::Role;
2
3 use base qw(IMPL::Object);
4
5 use IMPL::Class::Property;
6
7 BEGIN {
8 public property roleName => prop_get;
9 public property parentRoles => prop_get;
10 }
11
12 sub CTOR {
13 my ($this,$name,$parentRoles) = @_;
14
15 $this->roleName($name);
16 $this->parentRoles($parentRoles);
17 }
18
19 sub Satisfy {
20 my ($this,@roles) = @_;
21
22 return 1 unless $this->_FilterRoles( @roles );
23 }
24
25 sub _FilterRoles {
26 my ($this,@roles) = @_;
27
28 @roles = grep not (ref $_ ? $this == $_ : $this->roleName eq $_), @roles;
29
30 @roles = $_->_FilterRoles(@roles) or return foreach @{$this->parentRoles} ;
31
32 return @roles;
33 }
34
35
36 1;
37
38 __END__
39
40 =pod
41
42 =head1 DESCRIPTION
43
44 Роль. Может включать в себя базовые роли.
45 Имеется метод для проверки наличия необходимых ролей в текущей роли.
46
47 =head1 MEMBERS
48
49 =over
50
51 =item C<roleName>
52
53 Имя роли, ее идентификатор
54
55 =item C<parentRoles>
56
57 Список родительских ролей
58
59 =item C<Satisfy(@roles_list)>
60
61 Проверяет наличие ролей указанных ролей из списка @roles_list.
62 Допускается использование как самих объектов, так и имен ролей.
63 Возвращает 0 в случае неудачи, 1 при наличии необходимых ролей
64
65 =back
66
67 =cut