51
|
1 package IMPL::Security::Role;
|
|
2
|
|
3 use base qw(IMPL::Object);
|
|
4
|
|
5 use IMPL::Class::Property;
|
|
6
|
|
7 BEGIN {
|
73
|
8 public property roleName => prop_get | owner_set;
|
|
9 public property parentRoles => prop_get | owner_set | prop_list;
|
51
|
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
|
73
|
42 =head1 NAME
|
|
43
|
|
44 C<IMPL::Security::Role> Роль
|
|
45
|
51
|
46 =head1 DESCRIPTION
|
|
47
|
73
|
48 Может включать в себя базовые роли.
|
51
|
49 Имеется метод для проверки наличия необходимых ролей в текущей роли.
|
|
50
|
|
51 =head1 MEMBERS
|
|
52
|
|
53 =over
|
|
54
|
73
|
55 =item C<[get] roleName>
|
51
|
56
|
|
57 Имя роли, ее идентификатор
|
|
58
|
73
|
59 =item C<[get,list] parentRoles>
|
51
|
60
|
|
61 Список родительских ролей
|
|
62
|
|
63 =item C<Satisfy(@roles_list)>
|
|
64
|
|
65 Проверяет наличие ролей указанных ролей из списка @roles_list.
|
|
66 Допускается использование как самих объектов, так и имен ролей.
|
|
67 Возвращает 0 в случае неудачи, 1 при наличии необходимых ролей
|
|
68
|
|
69 =back
|
|
70
|
|
71 =cut |