Mercurial > pub > Impl
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 |