comparison Lib/IMPL/Web/Application/Resource.pm @ 330:fe725fad2d90

Added access checking to web resources
author sergey
date Tue, 04 Jun 2013 19:25:54 +0400
parents 546957c50a36
children 04a093f0a5a6
comparison
equal deleted inserted replaced
329:50ff1595bd62 330:fe725fad2d90
52 my $operation = $this->contract->verbs->{ lc($verb) }; 52 my $operation = $this->contract->verbs->{ lc($verb) };
53 53
54 die NotAllowedException->new( 54 die NotAllowedException->new(
55 allow => join( ',', map( uc, keys %{ $this->contract->verbs } ) ) ) 55 allow => join( ',', map( uc, keys %{ $this->contract->verbs } ) ) )
56 unless $operation; 56 unless $operation;
57
58 $this->AccessCheck($verb);
57 59
58 # в случае, когда один ресурс вызывает HTTP метод другого ресурса, нужно 60 # в случае, когда один ресурс вызывает HTTP метод другого ресурса, нужно
59 # сохранить оригинальный resourceLocation 61 # сохранить оригинальный resourceLocation
60 $action->context->{resourceLocation} ||= $this->location; 62 $action->context->{resourceLocation} ||= $this->location;
61 63
68 } 70 }
69 71
70 return _InvokeDelegate($operation, $this, $action ); 72 return _InvokeDelegate($operation, $this, $action );
71 } 73 }
72 74
75 sub AccessCheck {
76
77 }
78
73 sub PrepareEnvironment { 79 sub PrepareEnvironment {
74 my ($this) = @_; 80 my ($this) = @_;
75 81
76 my @stack; 82 my @stack;
77 my $env = {}; 83 my $env = {};
87 93
88 # это реализация по умолчанию, базируется информации о ресурсах, содержащийся 94 # это реализация по умолчанию, базируется информации о ресурсах, содержащийся
89 # в контракте. 95 # в контракте.
90 sub FetchChildResource { 96 sub FetchChildResource {
91 my ( $this, $childId ) = @_; 97 my ( $this, $childId ) = @_;
98
99 $this->AccessCheck('FETCH');
92 100
93 my ( $info, $childIdParts ) = 101 my ( $info, $childIdParts ) =
94 $this->contract->FindChildResourceInfo($childId); 102 $this->contract->FindChildResourceInfo($childId);
95 103
96 die NotFoundException->new( $this->location->url, $childId ) unless $info; 104 die NotFoundException->new( $this->location->url, $childId ) unless $info;