changeset 66:f47f93534005

Documentation
author wizard
date Thu, 18 Mar 2010 17:58:33 +0300 (2010-03-18)
parents 2840c4c85db8
children 9f5795a10939
files Lib/IMPL/Resources/Strings.pm Lib/IMPL/Security.pm Lib/IMPL/Security/Context.pm Lib/IMPL/Web/Security.pm Lib/IMPL/Web/Security/Embed.pm _doc/make.pl _test/Resources/app.xml
diffstat 7 files changed, 264 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/Resources/Strings.pm	Tue Mar 16 17:36:13 2010 +0300
+++ b/Lib/IMPL/Resources/Strings.pm	Thu Mar 18 17:58:33 2010 +0300
@@ -75,14 +75,21 @@
 sub get {
     my ($this,$msg_name) = @_;
 }
+
 1;
 
 __END__
 
 =pod
 
+=head1 NAME
+
+C<IMPL::Resources::Strings> - ��������� �������
+
 =head1 SYNOPSIS
 
+=begin code
+
 package Foo;
 
 use IMPL::Resources::Strings {
@@ -97,4 +104,38 @@
     
 }
 
+=end code
+
+=head1 DESCRIPTION
+
+����������� � ������� ������ �������, ������� ���������� ��������������
+����������������� ���������.
+
+��� ������� ������ ������ �� ���������� ���������:
+
+� ��������� �� ������� C<@Locations> ������ ���� � ������������� �����
+C<$Base/$Locale/$ModName>, ��� C<$Base>, C<$Locale> - ���������� ����������
+������ C<IMPL::Resourses::Strings>, � ���������� C<$ModName> ��������
+����� ������ 'C<::>' � ����� �������� ������ �� 'C</>'.
+
+���� ���� �� ��� ������, �� ������������ ����� � ��������, ���
+���������� ��� ������, ����� � ������������� ����� C<locale/$Locale/$ShortModName>,
+��� C<$ShortModeName> - ��������� ����� ����� 'C<::>' �� ����� �������� ������.
+
+���� ���� �� ������, �� ������������ ������, ��������� ��� ����������
+��������� � ������� ������.
+
+=head1 FORMAT
+
+=begin code text
+
+msg_name = any text with named %params%
+msg_hello = hello, %name%!!!
+msg_resolve = this is a value of the property: %user.age%
+
+msg_short_err = %error.Message%
+msg_full_err = %error% 
+
+=end code text 
+
 =cut
--- 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
--- a/Lib/IMPL/Security/Context.pm	Tue Mar 16 17:36:13 2010 +0300
+++ b/Lib/IMPL/Security/Context.pm	Thu Mar 18 17:58:33 2010 +0300
@@ -13,7 +13,7 @@
 
 BEGIN {
     public property Principal => prop_get;
-    public property AssignedRoles => prop_all;
+    public property AssignedRoles => prop_all | prop_list;
     public property AuthSession => prop_all;
 }
 
--- a/Lib/IMPL/Web/Security.pm	Tue Mar 16 17:36:13 2010 +0300
+++ b/Lib/IMPL/Web/Security.pm	Thu Mar 18 17:58:33 2010 +0300
@@ -10,16 +10,16 @@
 
 ������ ��� �������������� � ����������� ��� �������.
 
-�������� ������, �������� �� ���� ���������� ��� �����������, ���������� ����������� ������������
+�������� ������, ��������� �� ���� ���������� ��� �����������, ���������� ����������� ������������
 � ������� �������� ������������.
 
 ��� ���� ���������� ��������� ������ ��������������.
 
-���������� ��� �������������� ������ �������� ����� ��������������� ��������.
+���������� ��� �������������� ������ �������� ����� ��������������� ��������.
 
 =item C<IMPL::Web::Security::Server>
 
-��������������� ������������ �� ������ ������, ��������������� ��������
+��������������� ������������ �� ������ ������, ��������������� ��������
 
 =item C<IMPL::Web::Security::Embed>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/Web/Security/Embed.pm	Thu Mar 18 17:58:33 2010 +0300
@@ -0,0 +1,3 @@
+package IMPL::Web::Security::Embed;
+
+use base qw(IMPL::Object);
\ No newline at end of file
--- a/_doc/make.pl	Tue Mar 16 17:36:13 2010 +0300
+++ b/_doc/make.pl	Thu Mar 18 17:58:33 2010 +0300
@@ -32,7 +32,7 @@
     open my $hPod, "<:encoding(cp1251)", $fname or die "Failed to open $fname for input: $!";
     open my $hOut, ">:encoding(utf-8)", $fnameOut or die "Failed to open $fnameOut for output: $!";
     
-    my $parser = Pod::POM->new( );
+    my $parser = Pod::POM->new();
     
     my $pom = $parser->parse_file($hPod);
     
@@ -75,7 +75,7 @@
 		foreach my $itemKey (sort keys %{$index->{items}}) {
 			my $item = $index->{items}{$itemKey};
 			print $hout "<li>";
-			print $hout "<a href='$item->{url}'>" if $item->{url};
+			print $hout "<a target='content' href='$item->{url}'>" if $item->{url};
 			print $hout $item->{name};
 			print $hout "</a>" if $item->{url};
 			build_index($hout,$item) if $item->{items};
@@ -91,7 +91,7 @@
 
 process_dir($LibDir);
 
-open my $hout, ">:encoding(utf-8)", "$OutDir/index.html" or die "failed to open index.html for output: $!";
+open my $hout, ">:encoding(utf-8)", "$OutDir/toc.html" or die "failed to open toc.html for output: $!";
 
 print $hout <<HEADER;
 <html>
@@ -109,9 +109,28 @@
 </html>
 FOOTER
 
+undef $hout;
+
+open $hout, ">:encoding(utf-8)","$OutDir/index.html" or die "failed to open index.html for output: $!";
+
+print $hout <<FRAMES;
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
+<title>IMPL reference</title>
+</head>
+<frameset cols="30%,*">
+	<frame name="toc" src="toc.html"/>
+	<frame name="content" src="about:blank"/>
+</frameset>
+</html>
+FRAMES
+
 package PodViewHTML;
 use base qw(Pod::POM::View::HTML);
 
+use IPC::Open2;
+
 sub view_pod {
     my ($self, $pod) = @_;
     return "<html>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
@@ -121,7 +140,7 @@
 }
 sub view_begin {
 	my ($self,$begin) = @_;
-	$begin->format =~ /code/i ? return "<pre>\n".escape_html(join ("",$begin->text()))."</pre>\n" : return $self->SUPER::view_begin($begin); 
+	return code_highlight(join ("",$begin->content()),$begin->format);
 }
 
 sub escape_html {
@@ -169,3 +188,50 @@
 sub view_seq_code {
 	goto &view_seq_link;
 }
+
+sub view_code {
+	my ($self,$code) = @_;
+	
+	return code_highlight($code);
+}
+
+sub code_highlight {
+	my ($text,$format) = @_;
+	
+	if ($format) {
+		$format =~ s/code//i;
+		$format =~ s/\s+//g;
+	}
+	
+	$format ||= 'perl';
+	
+	return "<pre>".escape_html($text)."</pre>\n" if $format =~ /^text$/i;
+	
+	
+	
+	my ($hin,$hout);
+	local $/ = undef;
+	my $pid = eval { open2(
+		$hin, $hout, highlight => (
+			'--syntax' => $format,
+			'--html',
+			'--fragment',
+			'--inline-css',
+			'--enclose-pre'
+		)
+	) } or return "<pre>".escape_html($text)."</pre>\n";
+	
+	binmode $hout, ':encoding(utf8)';
+	binmode $hin, ':encoding(utf8)';
+	
+	print $hout $text;
+	
+	undef $hout;
+	
+	my $fragment = <$hin>;
+	
+	undef $hin;
+	
+	return $fragment;
+	
+}
--- a/_test/Resources/app.xml	Tue Mar 16 17:36:13 2010 +0300
+++ b/_test/Resources/app.xml	Thu Mar 18 17:58:33 2010 +0300
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Application id='app' type="Test::Web::Application::Instance">
+	
+	<!-- Begin custom properties -->
 	<name>Sample application</name>
 	<dataSource type='IMPL::Config::Activator' id='ds'>
 		<factory>IMPL::Object</factory>
@@ -13,11 +15,18 @@
 		<parameters type='HASH'>
 			<ds refid='ds'/>
 		</parameters>
-	</securityMod>
+	</securityMod>	
+	<!-- End custom properties -->
+	
+	<!-- direct access to the activators -->
 	<options type="HASH">
 		<dataSource refid='ds'/>
 	</options>
+	
+	<!-- Set default output encoding, can be changed due query handling -->
 	<responseCharset>utf-8</responseCharset>
+	
+	<!-- Actions creation configuration -->
 	<factoryAction type="IMPL::Object::Factory">
 		<factory>IMPL::Web::Application::Action</factory>
 		<parameters type='HASH'>
@@ -29,6 +38,8 @@
 			</responseFactory>
 		</parameters>
 	</factoryAction>
+	
+	<!-- Query processing  -->
 	<handlersQuery type="IMPL::Object::List">
 		<item type="IMPL::Web::QueryHandler::PageFormat">
 			<templatesCharset>cp1251</templatesCharset>