Mercurial > pub > Impl
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Security/Role.pm Mon Mar 01 17:25:36 2010 +0300 @@ -0,0 +1,67 @@ +package IMPL::Security::Role; + +use base qw(IMPL::Object); + +use IMPL::Class::Property; + +BEGIN { + public property roleName => prop_get; + public property parentRoles => prop_get; +} + +sub CTOR { + my ($this,$name,$parentRoles) = @_; + + $this->roleName($name); + $this->parentRoles($parentRoles); +} + +sub Satisfy { + my ($this,@roles) = @_; + + return 1 unless $this->_FilterRoles( @roles ); +} + +sub _FilterRoles { + my ($this,@roles) = @_; + + @roles = grep not (ref $_ ? $this == $_ : $this->roleName eq $_), @roles; + + @roles = $_->_FilterRoles(@roles) or return foreach @{$this->parentRoles} ; + + return @roles; +} + + +1; + +__END__ + +=pod + +=head1 DESCRIPTION + +Роль. Может включать в себя базовые роли. +Имеется метод для проверки наличия необходимых ролей в текущей роли. + +=head1 MEMBERS + +=over + +=item C<roleName> + +Имя роли, ее идентификатор + +=item C<parentRoles> + +Список родительских ролей + +=item C<Satisfy(@roles_list)> + +Проверяет наличие ролей указанных ролей из списка @roles_list. +Допускается использование как самих объектов, так и имен ролей. +Возвращает 0 в случае неудачи, 1 при наличии необходимых ролей + +=back + +=cut \ No newline at end of file