Skip to content

Commit d134965

Browse files
author
Marcin Stodulski
committed
psalm hints
1 parent 57be265 commit d134965

File tree

6 files changed

+66
-37
lines changed

6 files changed

+66
-37
lines changed

composer.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,9 @@
1919
"psr-4": {
2020
"mstodulski\\RbacWithPermissions\\": "src"
2121
}
22+
},
23+
"require-dev": {
24+
"vimeo/psalm": "^4.28",
25+
"psalm/plugin-symfony": "^3.1"
2226
}
2327
}

psalm.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0"?>
2+
<psalm
3+
errorLevel="5"
4+
resolveFromConfigFile="true"
5+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6+
xmlns="https://getpsalm.org/schema/config"
7+
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
8+
>
9+
<projectFiles>
10+
<directory name="src" />
11+
<ignoreFiles>
12+
<directory name="vendor" />
13+
</ignoreFiles>
14+
</projectFiles>
15+
</psalm>

src/entities/Permission.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Permission implements PermissionInterface
1717
private ?self $parent = null;
1818
private string $code = '';
1919
private string $name = '';
20+
public ?array $children = null;
2021

2122
public function setCode(string $code): void
2223
{
@@ -38,12 +39,12 @@ public function setName(string $name): void
3839
$this->name = $name;
3940
}
4041

41-
public function getParent(): ?PermissionInterface
42+
public function getParent(): ?Permission
4243
{
4344
return $this->parent;
4445
}
4546

46-
public function setParent(?PermissionInterface $parent): void
47+
public function setParent(?Permission $parent): void
4748
{
4849
$this->parent = $parent;
4950
}

src/entities/Role.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ class Role implements RoleInterface
1818
private string $code = '';
1919
private ?self $parent = null;
2020
private string $name = '';
21-
/** @var $permissions PermissionInterface[] */
21+
/** @var PermissionInterface[] $permissions */
2222
private array $permissions = [];
2323
private bool $hasAllPermissions = false;
24+
public ?array $children = null;
2425

2526
public function getCode(): string
2627
{
@@ -47,7 +48,7 @@ public function getParent(): ?RoleInterface
4748
return $this->parent;
4849
}
4950

50-
public function setParent(?RoleInterface $parent): void
51+
public function setParent(?Role $parent): void
5152
{
5253
$this->parent = $parent;
5354
}
@@ -62,7 +63,7 @@ public function setPermissions(array $permissions): void
6263
$this->permissions = $permissions;
6364
}
6465

65-
public function addPermission(PermissionInterface $permission)
66+
public function addPermission(PermissionInterface $permission): void
6667
{
6768
$this->permissions[$permission->getCode()] = $permission;
6869
}

src/interfaces/RoleInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ interface RoleInterface
1414
{
1515
public function getParent(): ?RoleInterface;
1616
public function getCode(): string;
17-
public function getPermissions();
17+
public function getPermissions(): array;
1818
public function isHasAllPermissions(): bool;
1919
}

src/services/Authorization.php

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
namespace mstodulski\RbacWithPermissions\services;
1212

13+
use mstodulski\RbacWithPermissions\entities\Permission;
14+
use mstodulski\RbacWithPermissions\entities\Role;
1315
use mstodulski\RbacWithPermissions\interfaces\PermissionInterface;
1416
use mstodulski\RbacWithPermissions\interfaces\RoleInterface;
1517

@@ -48,7 +50,7 @@ public function rolesHasPermission(array $roles, string $permissionCode) : bool
4850
return false;
4951
}
5052

51-
public function roleHasPermission(RoleInterface $role, $permissionCode): bool
53+
public function roleHasPermission(RoleInterface $role, string $permissionCode): bool
5254
{
5355
if ($role->isHasAllPermissions()) {
5456
return true;
@@ -104,58 +106,64 @@ public function getAllSubRolesAndPermissionsForRole(RoleInterface $role): array
104106
return [$rolesArray, $permissionsArray];
105107
}
106108

107-
private function getSubPermissionsForPermissions(&$permissionsArray, $permissionsTree = null) : void
109+
private function getSubPermissionsForPermissions(array &$permissionsArray, ?array $permissionsTree = null) : void
108110
{
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+
}
116120
}
117121
}
118-
}
119122

120-
if (isset($permission->children)) {
121-
$this->getSubPermissionsForPermissions($permissionsArray, $permission->children);
123+
if (isset($permission->children)) {
124+
$this->getSubPermissionsForPermissions($permissionsArray, $permission->children);
125+
}
122126
}
123127
}
124128
}
125129

126-
private function getSubRolesCodes(&$rolesArray, &$permissionsArray, $rolesTree = null) : void
130+
private function getSubRolesCodes(array &$rolesArray, array &$permissionsArray, array $rolesTree = null) : void
127131
{
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+
}
134139

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+
}
141147
}
142148
}
143149
}
144-
}
145150

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+
}
148154
}
149155
}
150156
}
151157

152-
private function buildTree(array $elements, $parentId = null): array
158+
private function buildTree(array $elements, string $parentId = null): array
153159
{
154160
$branch = array();
155161

156-
/** @var RoleInterface|PermissionInterface $element */
162+
/** @var Role|Permission $element */
157163
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;
159167
if ($elementParentId == $parentId) {
160168
$children = $this->buildTree($elements, $element->getCode());
161169
if ($children) {

0 commit comments

Comments
 (0)