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

ValidateResourceAccessStep::requiresBefore()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
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
}