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 (2010-03-01) |
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