diff Lib/IMPL/Security.pm @ 66:f47f93534005

Documentation
author wizard
date Thu, 18 Mar 2010 17:58:33 +0300
parents a1498298d3ee
children 2f31ecabe9ea
line wrap: on
line diff
--- a/Lib/IMPL/Security.pm	Tue Mar 16 17:36:13 2010 +0300
+++ b/Lib/IMPL/Security.pm	Thu Mar 18 17:58:33 2010 +0300
@@ -16,6 +16,12 @@
 	return 1;
 }
 
+sub Take {
+	my ($self,$principal,$refRoles) = @_;
+	
+	die new IMPL::NotImplementedException();
+}
+
 sub Rules {
 	return \@rules;
 }
@@ -26,6 +32,63 @@
 
 =pod
 
+=head1 NAME
+
+C<IMPL::Security> - Модуль для работы с функциями авторизации и аутентификации.
+
+=head1 SINOPSYS
+
+=begin code
+
+use IMPL::Security;
+
+my Method {
+	my $this = shift;
+	
+	# access check in the current context, using standard configuration
+	IMPL::Security->AccessCheck($this,'Method') or die new IMPL::AccessDeniedException("Access is denied");
+	
+	#some more results 
+}
+
+my DelegationMethod {
+	
+	my $this = shift;
+	
+	#forced delegation 
+	my $delegatedContext = IMPL::Security::Context->new(
+		Principal => IMPL::Security::Principal->new(
+			Name => 'suser'
+		),
+		AssignedRoles => ['administrator']
+	)
+	
+	my $result;
+	
+	$delegatedContext->Impersonate(sub{
+		$result = $this->Method();
+	});
+	
+	return $result;
+}
+
+my SafeDelegationMethod {
+	
+	my $this = shift;
+	
+	my $delegatedContext = IMPL::Security->Take( suser => 'administrator' );
+	
+	my $result;
+	
+	$delegatedContext->Impersonate(sub{
+		$result = $this->Method();
+	});
+	
+	return $result;
+}
+
+=end code
+
 =head1 DESCRIPTION
 
 Модуль для инфраструктуры безопасности, реализует основные функции для авторизации
@@ -38,6 +101,77 @@
 При проверке прав доступа происходит последовательная проверка правил доступа,
 если все правила выполнены, то доступ разрешается.
 
+=head1 MEMBERS
 
+=over
+
+=item C<AccessCheck($object,$desiredAccess,$context)>
+
+Метод. Проверка доступа к объекту с определенными правами, в определенном контексте безопасности.
+
+=over
+
+=item C<$object>
+
+Объект доступа.
+
+=item C<$desiredAccess>
+
+Требуемые права доступа.
+
+=item C<$context>
+
+Контекст безопасности, если не указан, то используется текущий C<< IMPL::Security::Context->contextCurrent >>
+
+=item C<returns>
+
+C<true | false> - результат проверки
+
+=back
+
+=item C<Take($principal,$role)>
+
+Метод. Делегирует текущему пользователю полномочия другого пользователя. При этом выполняется проверка
+правомерности такой операции. В случае неудачи вызывается исключение.
+
+=over
+
+=item C<$principal>
+
+Либо имя пользователя либо объект C<IMPL::Security::Principal>.
+
+=item C<$role>
+
+Либо имя либо ссылка на роль, или ссылка на массив либо имен, либо ролей.
+
+=item C<returns>
+
+Новый контекст безопасности.
+
+=back
+
+=item C<Roles()>
+
+Возвращает список правил которые выполняются при проверках доступа. Пререопределите этот
+метод, чтобы возвращать собственный список правил. Список правил является ссылкой на массив
+элементами которого являются функции.
+
+=begin code
+
+package MySecurity;
+
+use base qw(IMPL::Security);
+
+sub Rules {
+	return [
+		\&Rule1,
+		\&Rule2,
+		#...
+	]
+}
+
+=end code
+
+=back
 
 =cut
\ No newline at end of file