Completed
Push — master ( fc2b8b...a482e0 )
by Sebastian
03:04
created

AbstractResourceRouter::canRoute()

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 1
c 0
b 0
f 0
nc 1
1
<?php
2
namespace Kartenmacherei\RestFramework\Router;
3
4
use Kartenmacherei\RestFramework\Request\Request;
5
use Kartenmacherei\RestFramework\Request\UnauthorizedException;
6
use Kartenmacherei\RestFramework\ResourceRequest\ResourceRequest;
7
8
abstract class AbstractResourceRouter implements ResourceRouter
9
{
10
    /**
11
     * @var ResourceRouter
12
     */
13
    private $next;
14
15
    /**
16
     * @var Acl
17
     */
18
    private $acl;
19
20
    /**
21
     * @param Acl $acl
22
     */
23
    public function __construct(Acl $acl = null)
24
    {
25
        $this->acl = $acl;
26
    }
27
28
    /**
29
     * @param Request $request
30
     * @return ResourceRequest
31
     * @throws NoMoreRoutersException
32
     */
33
    public function route(Request $request): ResourceRequest
34
    {
35
        if ($this->canRoute($request)) {
36
            $this->protect($request);
37
            return $this->doRoute($request);
38
        }
39
        if (null !== $this->next) {
40
            return $this->next->route($request);
41
        }
42
        throw new NoMoreRoutersException();
43
    }
44
45
    /**
46
     * @param Request $request
47
     * @throws UnauthorizedException
48
     */
49
    private function protect(Request $request)
50
    {
51
        if (null === $this->acl) {
52
            return;
53
        }
54
        if (!$this->acl->complies($request)) {
55
            throw new UnauthorizedException();
56
        }
57
    }
58
59
    /**
60
     * @param ResourceRouter $router
61
     */
62
    public function setNext(ResourceRouter $router)
63
    {
64
        $this->next = $router;
65
    }
66
67
    /**
68
     * @param Request $request
69
     * @return bool
70
     */
71
    abstract protected function canRoute(Request $request): bool;
72
73
    /**
74
     * @param Request $request
75
     * @return ResourceRequest
76
     */
77
    abstract protected function doRoute(Request $request): ResourceRequest;
78
}
79