Completed
Push — master ( 4f1190...3b2a6f )
by Nikolas
03:34
created

WebAccessControl   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 61
wmc 6
lcom 2
cbo 1
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A factory() 0 5 1
A isVisible() 0 3 1
A isExecutionPermitted() 0 3 1
A acquirePermission() 0 7 2
1
<?php namespace rtens\domin\delivery\web;
2
3
use rtens\domin\AccessControl;
4
use watoki\curir\delivery\WebRequest;
5
6
class WebAccessControl implements AccessControl {
7
8
    /** @var WebRequest */
9
    protected $request;
10
11
    /** @var AccessControl */
12
    private $access;
13
14
    /** @var null|callable */
15
    private $acquire;
16
17
    /**
18
     * @param AccessControl $access
19
     * @param WebRequest $request
20
     * @param callable|null $acquire Receives the WebRequest, returns a URL to redirect to
21
     */
22
    public function __construct(AccessControl $access, WebRequest $request, callable $acquire = null) {
23
        $this->request = $request;
24
        $this->access = $access;
25
        $this->acquire = $acquire;
26
    }
27
28
    /**
29
     * @param AccessControl $access
30
     * @param callable|null $acquire Receives the WebRequest, returns a URL to redirect to
31
     * @return callable The factory to build a WebAccessControl
32
     */
33
    public static function factory(AccessControl $access, callable $acquire = null) {
34
        return function (WebRequest $request) use ($access, $acquire) {
35
            return new WebAccessControl($access, $request, $acquire);
36
        };
37
    }
38
39
    /**
40
     * @param string $actionId
41
     * @return boolean
42
     */
43
    public function isVisible($actionId) {
44
        return $this->access->isVisible($actionId);
45
    }
46
47
    /**
48
     * @param string $actionId
49
     * @param mixed[] $parameters indexed by parameter names
50
     * @return boolean
51
     */
52
    public function isExecutionPermitted($actionId, array $parameters) {
53
        return $this->access->isExecutionPermitted($actionId, $parameters);
54
    }
55
56
    /**
57
     * @return null|\watoki\curir\protocol\Url
58
     */
59
    public function acquirePermission() {
60
        if ($this->acquire) {
61
            return call_user_func($this->acquire, $this->request);
62
        }
63
64
        return null;
65
    }
66
}