comparison Lib/IMPL/Security/Context.pm @ 47:a9b70d836b28

Web::Application development (request controller) Security development
author Sergey
date Tue, 23 Feb 2010 22:57:16 +0300
parents
children 16ada169ca75
comparison
equal deleted inserted replaced
46:75148ccd732d 47:a9b70d836b28
1 package IMPL::Security::Context;
2 use strict;
3 use warnings;
4
5 use base qw(IMPL::Object);
6
7 use IMPL::Class::Property;
8
9 require IMPL::Security::Principal;
10
11 my $current = __PACKAGE__->nobody;
12 my $nobody;
13
14 BEGIN {
15 public property Principal => prop_get;
16 public property AssignedRoles => prop_all;
17 }
18
19 sub Impersonate {
20 my ($this,$code) = @_;
21
22 my $old = $current;
23 my $result;
24 local $@;
25 eval {
26 $result = $code->();
27 };
28 $current = $old;
29 if($@) {
30 die $@;
31 } else {
32 return $result;
33 }
34 }
35
36 sub nobody {
37 my ($self) = @_;
38 $nobody = $self->new(Principal => IMPL::Security::Principal->nobody, AssignedRoles => undef) unless $nobody;
39 $nobody;
40 }
41
42 1;