Test Failed
Push — main ( a94ea9...43938e )
by Jean-Christophe
02:16
created

AclArrayProvider::loadAllRoles()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 2
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
namespace Ubiquity\security\acl\persistence;
3
4
use Ubiquity\security\acl\models\AclElement;
5
use Ubiquity\security\acl\models\Permission;
6
use Ubiquity\security\acl\models\Resource;
7
use Ubiquity\security\acl\models\Role;
8
use Ubiquity\exceptions\AclException;
9
10
/**
11
 * Ubiquity\security\acl\persistence$AclArrayProvider
12
 * This class is part of Ubiquity
13
 *
14
 * @author jc
15
 * @version 1.0.0
16
 *
17
 */
18
abstract class AclArrayProvider implements AclProviderInterface {
19
20
	protected $aclsArray;
21
22
	protected $parts;
23
24
	public function __construct() {}
25 3
26 3
	protected function loadAllPart($class): array {
27 3
		$elements = [];
28 3
		foreach ($this->parts[$class] as $partArray) {
29 3
			$elm = new $class();
30 3
			$elm->fromArray($partArray);
31
			$elements[$partArray['name']] = $elm;
32 3
		}
33
		return $elements;
34
	}
35
36
	/**
37
	 *
38
	 * {@inheritdoc}
39
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllAcls()
40 3
	 */
41 3
	public function loadAllAcls(): array {
42 3
		$acls = [];
43 3
		foreach ($this->aclsArray as $aclArray) {
44 3
			$aclElement = new AclElement();
45 3
			$aclElement->fromArray($aclArray);
46
			$acls[$aclElement->getId_()] = $aclElement;
47 3
		}
48
		return $acls;
49
	}
50 1
51 1
	public function saveAcl(AclElement $aclElement) {
52 1
		$this->aclsArray[$aclElement->getId_()] = $aclElement->toArray();
53
	}
54
55
	public function removeAcl(AclElement $aclElement) {
56
		unset($this->aclsArray[$aclElement->getId_()]);
57
	}
58
59 3
	/**
60 3
	 *
61
	 * {@inheritdoc}
62
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllPermissions()
63
	 */
64
	public function loadAllPermissions(): array {
65
		return $this->loadAllPart(Permission::class);
66
	}
67
68 3
	/**
69 3
	 *
70
	 * {@inheritdoc}
71
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllResources()
72
	 */
73
	public function loadAllResources(): array {
74
		return $this->loadAllPart(Resource::class);
75
	}
76
77 3
	/**
78 3
	 *
79
	 * {@inheritdoc}
80
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllRoles()
81 2
	 */
82 2
	public function loadAllRoles(): array {
83 2
		return $this->loadAllPart(Role::class);
84 2
	}
85
86
	public function savePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
87
		$class = \get_class($part);
88
		$this->parts[$class][$part->getName()] = $part->toArray();
89
	}
90
91
	public function updatePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
92
		$class = \get_class($part);
93
		$this->parts[$class][$part->getName()] = $part->toArray();
94
	}
95
96
	public function removePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
97
		$name = $part->getName();
98
		if ($part instanceof Resource) {
99
			$field = 'resource';
100
		} elseif ($part instanceof Role) {
101
			$field = 'role';
102
		} else {
103
			$field = 'permission';
104
		}
105
		foreach ($this->aclsArray as $acl) {
106
			if ($acl[$field]['name'] === $name) {
107
				throw new AclException("$name is in use in ACLs and can't be removed!");
108
			}
109
		}
110
		unset($this->parts[\get_class($part)][$name]);
111
	}
112
}
113
114