Completed
Push — develop ( 1febcc...70acef )
by Mario
03:07
created

Accesses::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace AppBundle\Tenant;
4
5
use Ds\Component\Security\Service\AccessService;
6
use Ds\Component\Security\Service\PermissionService;
7
use Ds\Component\Tenant\Loader\Loader;
8
use Symfony\Component\Yaml\Yaml;
9
10
/**
11
 * Class Accesses
12
 */
13
class Accesses implements Loader
14
{
15
    /**
16
     * @var \Ds\Component\Security\Service\AccessService
17
     */
18
    protected $accessService;
19
20
    /**
21
     * @var \Ds\Component\Security\Service\PermissionService
22
     */
23
    protected $permissionService;
24
25
    /**
26
     * Constructor
27
     *
28
     * @param \Ds\Component\Security\Service\AccessService $accessService
29
     * @param \Ds\Component\Security\Service\PermissionService $permissionService
30
     */
31
    public function __construct(AccessService $accessService, PermissionService $permissionService)
32
    {
33
        $this->accessService = $accessService;
34
        $this->permissionService = $permissionService;
35
    }
36
37
    /**
38
     * {@inheritdoc}
39
     */
40
    public function load(array $data)
41
    {
42
        $yml = file_get_contents('/srv/api-platform/src/AppBundle/Resources/tenant/accesses.yml');
43
44
        // @todo Figure out how symfony does parameter binding and use the same technique
45
        $yml = strtr($yml, [
46
            '%identity.system.uuid%' => $data['identity']['system']['uuid'],
47
            '%business_unit.administration.uuid%' => $data['business_unit']['administration']['uuid'],
48
            '%identity.admin.uuid%' => $data['identity']['admin']['uuid'],
49
            '%tenant.uuid%' => $data['tenant']['uuid']
50
        ]);
51
52
        $accesses = Yaml::parse($yml, YAML::PARSE_OBJECT_FOR_MAP);
53
        $manager = $this->accessService->getManager();
54
55
        foreach ($accesses->objects as $object) {
56
            $object = (object) array_merge((array) $accesses->prototype, (array) $object);
57
            $access = $this->accessService->createInstance();
58
            $access
59
                ->setOwner($object->owner)
60
                ->setOwnerUuid($object->owner_uuid)
61
                ->setAssignee($object->assignee)
62
                ->setAssigneeUuid($object->assignee_uuid)
63
                ->setTenant($object->tenant);
64
65
            foreach ($object->permissions as $subObject) {
66
                $permission = $this->permissionService->createInstance();
67
                $permission
68
                    ->setScope($subObject->scope)
69
                    ->setKey($subObject->key)
70
                    ->setAttributes($subObject->attributes)
71
                    ->setTenant($object->tenant);
72
                $access->addPermission($permission);
73
            }
74
75
            $manager->persist($access);
76
            $manager->flush();
77
        }
78
    }
79
}
80