Passed
Pull Request — master (#9)
by Roman
03:21
created

ValidateResourceAccessStep   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 45
rs 10
c 0
b 0
f 0
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A requiresBefore() 0 3 1
A execute() 0 10 2
1
<?php
2
3
namespace Kami\ApiCoreBundle\RequestProcessor\Step\Common;
4
5
6
use Kami\ApiCoreBundle\RequestProcessor\ProcessorResponse;
7
use Kami\ApiCoreBundle\RequestProcessor\ResponseInterface;
8
use Kami\ApiCoreBundle\RequestProcessor\Step\AbstractStep;
9
use Kami\ApiCoreBundle\Security\AccessManager;
10
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
11
12
class ValidateResourceAccessStep extends AbstractStep
13
{
14
    /**
15
     * @var AccessManager
16
     */
17
    protected $accessManager;
18
19
    /**
20
     * @var array
21
     */
22
    protected $validatorMap = [
23
        'GET' => 'canAccessResource',
24
        'POST' => 'canCreateResource',
25
        'PUT' => 'canUpdateResource',
26
        'DELETE' => 'canDeleteResource'
27
    ];
28
29
    /**
30
     * ValidateResourceAccessStep constructor.
31
     *
32
     * @param AccessManager $accessManager
33
     */
34
    public function __construct(AccessManager $accessManager)
35
    {
36
        $this->accessManager = $accessManager;
37
    }
38
39
    /**
40
     * @return ResponseInterface
41
     */
42
    public function execute()
43
    {
44
        /** @var \ReflectionClass $reflection */
45
        $reflection = $this->getFromResponse('reflection');
46
        $method = $this->validatorMap[$this->request->getMethod()];
47
        if (!call_user_func([$this->accessManager, $method], $reflection)) {
48
            throw new AccessDeniedHttpException();
49
        }
50
51
        return new ProcessorResponse($this->request, $this->response->getData());
52
    }
53
54
    public function requiresBefore()
55
    {
56
        return [GetReflectionFromRequestStep::class];
57
    }
58
}