-
Notifications
You must be signed in to change notification settings - Fork 0
/
UserPermissionResolver.php
43 lines (37 loc) · 1.27 KB
/
UserPermissionResolver.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
declare(strict_types=1);
namespace AnzuSystems\Contracts\Security;
use AnzuSystems\Contracts\Entity\AnzuPermissionGroup;
use AnzuSystems\Contracts\Entity\AnzuUser;
/**
* Resolves user permissions from user's permissions groups and his own permissions.
*/
final class UserPermissionResolver
{
public static function resolve(AnzuUser $user): array
{
return array_merge(
self::resolveGroupPermissions($user->getPermissionGroups()),
$user->getPermissions()
);
}
/**
* @param iterable<int, AnzuPermissionGroup> $permissionGroups
*/
private static function resolveGroupPermissions(iterable $permissionGroups): array
{
$permissions = [];
foreach ($permissionGroups as $permissionGroup) {
foreach ($permissionGroup->getPermissions() as $permissionName => $permissionValue) {
if (false === array_key_exists($permissionName, $permissions)) {
$permissions[$permissionName] = $permissionValue;
continue;
}
if ($permissions[$permissionName] < $permissionValue) {
$permissions[$permissionName] = $permissionValue;
}
}
}
return $permissions;
}
}