Mercurial > pub > Impl
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>