Passed
Push — main ( 6cee10...25dcc1 )
by Jean-Christophe
02:23
created

AclDAOProvider::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 2
Bugs 0 Features 1
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 2
b 0
f 1
1
<?php
2
namespace Ubiquity\security\acl\persistence;
3
4
use Ubiquity\orm\DAO;
5
use Ubiquity\security\acl\models\AbstractAclPart;
6
use Ubiquity\security\acl\models\AclElement;
7
use Ubiquity\security\acl\models\Permission;
8
use Ubiquity\security\acl\models\Resource;
9
use Ubiquity\security\acl\models\Role;
10
use Ubiquity\orm\OrmUtils;
11
12
/**
13
 * Load and save Acls with a database using DAO.
14
 * Ubiquity\security\acl\persistence$AclDAOProvider
15
 * This class is part of Ubiquity
16
 *
17
 * @author jc
18
 * @version 1.0.0
19
 *
20
 */
21
class AclDAOProvider implements AclProviderInterface {
22
23
	protected $aclClass;
24
25
	protected $roleClass;
26
27
	protected $permissionClass;
28
29
	protected $resourceClass;
30
31
	/**
32
	 *
33
	 * @param array $classes
34
	 *        	associative array['acl'=>'','role'=>'','resource'=>'','permission'=>'']
35
	 */
36 4
	public function __construct($classes = []) {
37 4
		$this->aclClass = $classes['acl'] ?? AclElement::class;
38 4
		$this->roleClass = $classes['role'] ?? Role::class;
39 4
		$this->resourceClass = $classes['resource'] ?? Resource::class;
40 4
		$this->permissionClass = $classes['permission'] ?? Permission::class;
41 4
	}
42
43
	public function setDbOffset($dbOffset = 'default') {
44
		DAO::setModelDatabase($this->aclClass, $dbOffset);
45
		DAO::setModelDatabase($this->resourceClass, $dbOffset);
46
		DAO::setModelDatabase($this->roleClass, $dbOffset);
47
		DAO::setModelDatabase($this->permissionClass, $dbOffset);
48
	}
49
50
	/**
51
	 *
52
	 * {@inheritdoc}
53
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllAcls()
54
	 */
55 4
	public function loadAllAcls(): array {
56 4
		return DAO::getAll($this->aclClass);
57
	}
58
59
	/**
60
	 *
61
	 * {@inheritdoc}
62
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::saveAcl()
63
	 */
64 1
	public function saveAcl(AclElement $aclElement) {
65 1
		$object = $this->castElement($aclElement);
66 1
		$res = DAO::save($object);
67 1
		if ($res) {
68 1
			$aclElement->setId($object->getId());
69
		}
70 1
		return $res;
71
	}
72
73
	/**
74
	 *
75
	 * {@inheritdoc}
76
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::removeAcl()
77
	 */
78 1
	public function removeAcl(AclElement $aclElement) {
79 1
		return DAO::remove($aclElement);
80
	}
81
82 4
	protected function loadElements(string $className): array {
83 4
		$elements = DAO::getAll($className);
84 4
		$result = [];
85 4
		foreach ($elements as $elm) {
86 4
			$result[$elm->getName()] = $elm;
87
		}
88 4
		return $result;
89
	}
90
91 3
	protected function castElement($part) {
92 3
		$class = $this->getModelClasses()[get_class($part)] ?? get_class($part);
93 3
		return $part->castAs($class);
94
	}
95
96
	/**
97
	 *
98
	 * {@inheritdoc}
99
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllPermissions()
100
	 */
101 4
	public function loadAllPermissions(): array {
102 4
		return $this->loadElements($this->permissionClass);
103
	}
104
105
	/**
106
	 *
107
	 * {@inheritdoc}
108
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllResources()
109
	 */
110 4
	public function loadAllResources(): array {
111 4
		return $this->loadElements($this->resourceClass);
112
	}
113
114
	/**
115
	 *
116
	 * {@inheritdoc}
117
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllRoles()
118
	 */
119 4
	public function loadAllRoles(): array {
120 4
		return $this->loadElements($this->roleClass);
121
	}
122
123
	/**
124
	 *
125
	 * {@inheritdoc}
126
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::savePart()
127
	 */
128 2
	public function savePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
129 2
		$object = $this->castElement($part);
130 2
		$res = DAO::insert($object);
131 2
		if ($res) {
132 2
			$part->setId($object->getId());
133
		}
134 2
		return $res;
135
	}
136
137
	/**
138
	 *
139
	 * {@inheritdoc}
140
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::updatePart()
141
	 */
142 1
	public function updatePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
143 1
		return DAO::update($this->castElement($part));
144
	}
145
146
	/**
147
	 *
148
	 * {@inheritdoc}
149
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::removePart()
150
	 */
151 2
	public function removePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
152 2
		return DAO::remove($this->castElement($part));
153
	}
154
155 1
	public function isAutosave(): bool {
156 1
		return true;
157
	}
158
159
	public function saveAll(): void {}
160
161 1
	public function existPart(AbstractAclPart $part): bool {
162 1
		$elm = $this->castElement($part);
163 1
		return DAO::exists(\get_class($elm), 'id= ?', [
164 1
			$elm->getId()
165
		]);
166
	}
167
168 1
	public function existAcl(AclElement $aclElement): bool {
169 1
		$elm = $this->castElement($aclElement);
170 1
		return DAO::exists(\get_class($aclElement), 'id= ?', [
171 1
			$elm->getId()
172
		]);
173
	}
174
175
	public function getDetails(): array {
176
		return [
177
			'user' => $this->roleClass,
178
			'archive' => $this->resourceClass,
179
			'unlock alternate' => $this->permissionClass,
180
			'lock' => $this->aclClass
181
		];
182
	}
183
184
	public function getModelClassesSwap(): array {
185
		$swap = $this->getModelClasses();
186
		$classes = \array_values($swap);
187
		$result = [];
188
		foreach ($classes as $class) {
189
			$result[$class] = $swap;
190
		}
191
		return $result;
192
	}
193
194 3
	public function getModelClasses(): array {
195
		return [
196 3
			AclElement::class => $this->aclClass,
197 3
			Role::class => $this->roleClass,
198 3
			Resource::class => $this->resourceClass,
199 3
			Permission::class => $this->permissionClass
200
		];
201
	}
202
203 1
	public function clearAll(): void {}
204
}
205
206