Completed
Pull Request — development (#798)
by Nick
04:43
created

RoleHierarchyBuilder::build()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 0
dl 0
loc 18
rs 9.6666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Oc\Security;
6
7
use Oc\Entity\SecurityRoleHierarchyEntity;
8
use Oc\Entity\SecurityRolesEntity;
9
use Oc\Repository\SecurityRoleHierarchyRepository;
10
use Oc\Repository\SecurityRolesRepository;
11
12
class RoleHierarchyBuilder
13
{
14
    /**
15
     * @var SecurityRoleHierarchyRepository
16
     */
17
    private $securityRoleHierarchyRepository;
18
19
    /**
20
     * @var SecurityRolesRepository
21
     */
22
    private $securityRolesRepository;
23
24
    public function __construct(SecurityRolesRepository $securityRolesRepository, SecurityRoleHierarchyRepository $securityRoleHierarchyRepository)
25
    {
26
        $this->securityRoleHierarchyRepository = $securityRoleHierarchyRepository;
27
        $this->securityRolesRepository = $securityRolesRepository;
28
    }
29
30
    public function build(): array
31
    {
32
        $roles = $this->securityRolesRepository->fetchAll();
33
        $roleDictionary = $this->createRoleDictionary($roles);
34
        $hierarchyEntries = $this->securityRoleHierarchyRepository->fetchAll();
35
36
        $result = [];
37
38
        /** @var SecurityRoleHierarchyEntity $hierarchyEntry */
39
        foreach ($hierarchyEntries as $hierarchyEntry) {
40
            $role = $roleDictionary[$hierarchyEntry->roleId];
41
            $subRole = $roleDictionary[$hierarchyEntry->subRoleId];
42
43
            $result[$role][] = $subRole;
44
        }
45
46
        return $result;
47
    }
48
49
    private function createRoleDictionary(array $roles): array
50
    {
51
        $result = [];
52
53
        /** @var SecurityRolesEntity $role */
54
        foreach ($roles as $role) {
55
            $result[$role->id] = $role->role;
56
        }
57
58
        return $result;
59
    }
60
}
61