Test Failed
Push — main ( 4912ab...17ff64 )
by Jean-Christophe
02:36
created

AclDAOProvider   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 155
Duplicated Lines 0 %

Test Coverage

Coverage 75%

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 45
dl 0
loc 155
ccs 36
cts 48
cp 0.75
rs 10
c 2
b 1
f 0
wmc 20

18 Methods

Rating   Name   Duplication   Size   Complexity  
A saveAcl() 0 2 1
A updatePart() 0 2 1
A isAutosave() 0 2 1
A __construct() 0 5 1
A loadAllAcls() 0 2 1
A getModelClassesSwap() 0 13 2
A loadElements() 0 7 2
A existPart() 0 2 1
A setDbOffset() 0 5 1
A removeAcl() 0 2 1
A savePart() 0 2 1
A loadAllResources() 0 2 1
A saveAll() 0 1 1
A existAcl() 0 2 1
A removePart() 0 2 1
A loadAllRoles() 0 2 1
A loadAllPermissions() 0 2 1
A getDetails() 0 6 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 4
	 */
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
	}
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 4
	 */
55 4
	public function loadAllAcls(): array {
56
		return DAO::getAll($this->aclClass);
57
	}
58
59
	/**
60
	 *
61
	 * {@inheritdoc}
62
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::saveAcl()
63 1
	 */
64 1
	public function saveAcl(AclElement $aclElement) {
65
		return DAO::save($aclElement);
66
	}
67
68
	/**
69
	 *
70
	 * {@inheritdoc}
71
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::removeAcl()
72 1
	 */
73 1
	public function removeAcl(AclElement $aclElement) {
74
		return DAO::remove($aclElement);
75
	}
76 4
77 4
	protected function loadElements(string $className): array {
78 4
		$elements = DAO::getAll($className);
79 4
		$result = [];
80 4
		foreach ($elements as $elm) {
81
			$result[$elm->getName()] = $elm;
82 4
		}
83
		return $result;
84
	}
85
86
	/**
87
	 *
88
	 * {@inheritdoc}
89
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllPermissions()
90 4
	 */
91 4
	public function loadAllPermissions(): array {
92
		return $this->loadElements($this->permissionClass);
93
	}
94
95
	/**
96
	 *
97
	 * {@inheritdoc}
98
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllResources()
99 4
	 */
100 4
	public function loadAllResources(): array {
101
		return $this->loadElements($this->resourceClass);
102
	}
103
104
	/**
105
	 *
106
	 * {@inheritdoc}
107
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::loadAllRoles()
108 4
	 */
109 4
	public function loadAllRoles(): array {
110
		return $this->loadElements($this->roleClass);
111
	}
112
113
	/**
114
	 *
115
	 * {@inheritdoc}
116
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::savePart()
117 2
	 */
118 2
	public function savePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
119
		return DAO::insert($part);
120
	}
121
122
	/**
123
	 *
124
	 * {@inheritdoc}
125
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::updatePart()
126 1
	 */
127 1
	public function updatePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
128
		return DAO::update($part);
129
	}
130
131
	/**
132
	 *
133
	 * {@inheritdoc}
134
	 * @see \Ubiquity\security\acl\persistence\AclProviderInterface::removePart()
135 2
	 */
136 2
	public function removePart(\Ubiquity\security\acl\models\AbstractAclPart $part) {
137
		return DAO::remove($part);
138
	}
139 1
140 1
	public function isAutosave(): bool {
141
		return true;
142
	}
143
144
	public function saveAll(): void {}
145 1
146 1
	public function existPart(AbstractAclPart $part): bool {
147
		return DAO::exists(\get_class($part));
148
	}
149 1
150 1
	public function existAcl(AclElement $aclElement): bool {
151
		return DAO::exists(\get_class($aclElement));
152
	}
153
154
	public function getDetails(): array {
155
		return [
156
			'user' => $this->roleClass,
157
			'archive' => $this->resourceClass,
158
			'unlock alternate' => $this->permissionClass,
159
			'lock' => $this->aclClass
160
		];
161
	}
162
163
	public function getModelClassesSwap(): array {
164
		$swap = [
165
			AclElement::class => $this->aclClass,
166
			Role::class => $this->roleClass,
167
			Resource::class => $this->resourceClass,
168
			Permission::class => $this->permissionClass
169
		];
170
		$classes = \array_values($swap);
171
		$result = [];
172
		foreach ($classes as $class) {
173
			$result[$class] = $swap;
174
		}
175
		return $result;
176
	}
177
}
178
179