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