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