Passed
Branch request-processor (31ada2)
by Iakov
02:59
created

ValidateResourceAccessStep   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 50
rs 10
c 0
b 0
f 0
wmc 11

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setAccessManager() 0 3 1
A requiresBefore() 0 3 1
D execute() 0 30 9
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
     * @return ResponseInterface
21
     */
22
    public function execute()
23
    {
24
        /** @var \ReflectionClass $reflection */
25
        $reflection = $this->getFromResponse('reflection');
26
27
        switch ($this->request->getMethod()) {
28
            case 'GET':
29
                if (!$this->accessManager->canAccessResource($reflection)) {
30
                    throw new AccessDeniedHttpException();
31
                }
32
                break;
33
            case 'POST':
34
                if (!$this->accessManager->canCreateResource($reflection)) {
35
                    throw new AccessDeniedHttpException();
36
                }
37
                break;
38
            case 'PUT':
39
                if (!$this->accessManager->canUpdateResource($reflection)) {
40
                    throw new AccessDeniedHttpException();
41
                }
42
                break;
43
            case 'DELETE':
44
                if (!$this->accessManager->canDeleteResource($reflection)) {
45
                    throw new AccessDeniedHttpException();
46
                }
47
                break;
48
        }
49
50
51
        return new ProcessorResponse($this->request, $this->response->getData());
52
    }
53
54
    public function setAccessManager(AccessManager $accessManager)
55
    {
56
        $this->accessManager = $accessManager;
57
    }
58
59
    public function requiresBefore()
60
    {
61
        return [GetReflectionFromRequestStep::class];
62
    }
63
}