Completed
Push — master ( f65d8f...4f3de5 )
by Pavel
04:14 queued 01:54
created

Acl   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 2
Bugs 1 Features 1
Metric Value
c 2
b 1
f 1
dl 0
loc 44
rs 10
wmc 17
lcom 0
cbo 3

1 Method

Rating   Name   Duplication   Size   Complexity  
D __construct() 0 41 17
1
<?php
2
namespace App\Common;
3
4
use Zend\Permissions\Acl\Acl as ZendAcl;
5
use Zend\Permissions\Acl\Role\GenericRole as Role;
6
use Zend\Permissions\Acl\Resource\GenericResource as Resource;
7
8
final class Acl extends ZendAcl
9
{
10
    public function __construct($configuration)
11
    {
12
        // setup roles
13
        foreach ($configuration['roles'] as $role => $parents) {
14
            $this->addRole(new Role($role), $parents);
15
        }
16
        // setup resources
17
        if (array_key_exists('resources', $configuration)) {
18
            foreach ($configuration['resources'] as $resource => $parent) {
19
                $this->addResource(new Resource($resource), $parent);
20
            }
21
        }
22
        foreach ($configuration['guards'] as $guardType => $guardRules) {
23
            if (!in_array($guardType, ['resources', 'routes', 'callables'])) {
24
                throw new \Exception('Error Processing Request');
25
            }
26
            foreach ($guardRules as $rule) {
27
                if ('callables' === $guardType && 2 !== count($rule)) {
28
                    throw new \Exception('Error Processing Request');
29
                }
30
                if ('callables' !== $guardType && 3 !== count($rule)) {
31
                    if (('resources' === $guardType && 2 !== count($rule)) || 'routes' === $guardType) {
32
                        throw new \Exception('Error Processing Request');
33
                    } else {
34
                        $rule[] = null;
35
                    }
36
                }
37
                list($resource, $roles) = $rule;
38
                $privileges = (3 === count($rule) ? $rule[2] : null);
39
                if ('callables' === $guardType) {
40
                    $resource = 'callable/'.$resource;
41
                    $this->addResource(new Resource($resource));
42
                } elseif ('routes' === $guardType) {
43
                    $resource = 'route'.$resource;
44
                    $this->addResource(new Resource($resource));
45
                    $privileges = array_map('strtolower', $privileges);
46
                }
47
                $this->allow($roles, $resource, $privileges);
48
            }
49
        }
50
    }
51
}
52