Test Failed
Push — main ( aa1510...6e07a8 )
by Jean-Christophe
02:18
created

AclDAOProvider::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

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