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