|
10 | 10 |
|
11 | 11 | namespace mstodulski\RbacWithPermissions\services; |
12 | 12 |
|
| 13 | +use mstodulski\RbacWithPermissions\entities\Permission; |
| 14 | +use mstodulski\RbacWithPermissions\entities\Role; |
13 | 15 | use mstodulski\RbacWithPermissions\interfaces\PermissionInterface; |
14 | 16 | use mstodulski\RbacWithPermissions\interfaces\RoleInterface; |
15 | 17 |
|
@@ -48,7 +50,7 @@ public function rolesHasPermission(array $roles, string $permissionCode) : bool |
48 | 50 | return false; |
49 | 51 | } |
50 | 52 |
|
51 | | - public function roleHasPermission(RoleInterface $role, $permissionCode): bool |
| 53 | + public function roleHasPermission(RoleInterface $role, string $permissionCode): bool |
52 | 54 | { |
53 | 55 | if ($role->isHasAllPermissions()) { |
54 | 56 | return true; |
@@ -104,58 +106,64 @@ public function getAllSubRolesAndPermissionsForRole(RoleInterface $role): array |
104 | 106 | return [$rolesArray, $permissionsArray]; |
105 | 107 | } |
106 | 108 |
|
107 | | - private function getSubPermissionsForPermissions(&$permissionsArray, $permissionsTree = null) : void |
| 109 | + private function getSubPermissionsForPermissions(array &$permissionsArray, ?array $permissionsTree = null) : void |
108 | 110 | { |
109 | | - /** @var PermissionInterface $permission */ |
110 | | - foreach ($permissionsTree as $permission) { |
111 | | - if (in_array($permission->getCode(), $permissionsArray)) { |
112 | | - if (isset($permission->children)) { |
113 | | - /** @var PermissionInterface $childPermission */ |
114 | | - foreach ($permission->children as $childPermission) { |
115 | | - $permissionsArray[$childPermission->getCode()] = $childPermission->getCode(); |
| 111 | + if (!empty($permissionsTree)) { |
| 112 | + /** @var Permission $permission */ |
| 113 | + foreach ($permissionsTree as $permission) { |
| 114 | + if (in_array($permission->getCode(), $permissionsArray)) { |
| 115 | + if (isset($permission->children)) { |
| 116 | + /** @var Permission $childPermission */ |
| 117 | + foreach ($permission->children as $childPermission) { |
| 118 | + $permissionsArray[$childPermission->getCode()] = $childPermission->getCode(); |
| 119 | + } |
116 | 120 | } |
117 | 121 | } |
118 | | - } |
119 | 122 |
|
120 | | - if (isset($permission->children)) { |
121 | | - $this->getSubPermissionsForPermissions($permissionsArray, $permission->children); |
| 123 | + if (isset($permission->children)) { |
| 124 | + $this->getSubPermissionsForPermissions($permissionsArray, $permission->children); |
| 125 | + } |
122 | 126 | } |
123 | 127 | } |
124 | 128 | } |
125 | 129 |
|
126 | | - private function getSubRolesCodes(&$rolesArray, &$permissionsArray, $rolesTree = null) : void |
| 130 | + private function getSubRolesCodes(array &$rolesArray, array &$permissionsArray, array $rolesTree = null) : void |
127 | 131 | { |
128 | | - /** @var RoleInterface $role */ |
129 | | - foreach ($rolesTree as $role) { |
130 | | - if (in_array($role->getCode(), $rolesArray)) { |
131 | | - foreach ($role->getPermissions() as $permission) { |
132 | | - $permissionsArray[$permission->getCode()] = $permission->getCode(); |
133 | | - } |
| 132 | + if (!empty($rolesTree)) { |
| 133 | + /** @var Role $role */ |
| 134 | + foreach ($rolesTree as $role) { |
| 135 | + if (in_array($role->getCode(), $rolesArray)) { |
| 136 | + foreach ($role->getPermissions() as $permission) { |
| 137 | + $permissionsArray[$permission->getCode()] = $permission->getCode(); |
| 138 | + } |
134 | 139 |
|
135 | | - if (isset($role->children)) { |
136 | | - /** @var RoleInterface $childRole */ |
137 | | - foreach ($role->children as $childRole) { |
138 | | - $rolesArray[] = $childRole->getCode(); |
139 | | - foreach ($childRole->getPermissions() as $permission) { |
140 | | - $permissionsArray[$permission->getCode()] = $permission->getCode(); |
| 140 | + if (isset($role->children)) { |
| 141 | + /** @var Role $childRole */ |
| 142 | + foreach ($role->children as $childRole) { |
| 143 | + $rolesArray[] = $childRole->getCode(); |
| 144 | + foreach ($childRole->getPermissions() as $permission) { |
| 145 | + $permissionsArray[$permission->getCode()] = $permission->getCode(); |
| 146 | + } |
141 | 147 | } |
142 | 148 | } |
143 | 149 | } |
144 | | - } |
145 | 150 |
|
146 | | - if (isset($role->children)) { |
147 | | - $this->getSubRolesCodes($rolesArray, $permissionsArray, $role->children); |
| 151 | + if (isset($role->children)) { |
| 152 | + $this->getSubRolesCodes($rolesArray, $permissionsArray, $role->children); |
| 153 | + } |
148 | 154 | } |
149 | 155 | } |
150 | 156 | } |
151 | 157 |
|
152 | | - private function buildTree(array $elements, $parentId = null): array |
| 158 | + private function buildTree(array $elements, string $parentId = null): array |
153 | 159 | { |
154 | 160 | $branch = array(); |
155 | 161 |
|
156 | | - /** @var RoleInterface|PermissionInterface $element */ |
| 162 | + /** @var Role|Permission $element */ |
157 | 163 | foreach ($elements as $element) { |
158 | | - $elementParentId = ($element->getParent() !== null) ? $element->getParent()->getCode() : null; |
| 164 | + /** @var ?Role|?Permission $parentElement */ |
| 165 | + $parentElement = $element->getParent(); |
| 166 | + $elementParentId = ($parentElement !== null) ? $parentElement->getCode() : null; |
159 | 167 | if ($elementParentId == $parentId) { |
160 | 168 | $children = $this->buildTree($elements, $element->getCode()); |
161 | 169 | if ($children) { |
|
0 commit comments