Issues (3877)

Business/Creator/AclEntityRuleCreator.php (4 issues)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Spryker Marketplace License Agreement. See LICENSE file.
6
 */
7
8
namespace Spryker\Zed\AclMerchantPortal\Business\Creator;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\AclEntitySegmentTransfer;
12
use Generated\Shared\Transfer\RoleTransfer;
13
use Spryker\Zed\AclMerchantPortal\Business\Filter\AclEntityRuleFilterInterface;
14
use Spryker\Zed\AclMerchantPortal\Dependency\Facade\AclMerchantPortalToAclEntityFacadeInterface;
15
16
class AclEntityRuleCreator implements AclEntityRuleCreatorInterface
17
{
18
    /**
19
     * @uses \Spryker\Shared\AclEntity\AclEntityConstants::SCOPE_SEGMENT
20
     *
21
     * @var string
22
     */
23
    protected const SCOPE_SEGMENT = 'segment';
24
25
    /**
26
     * @var \Spryker\Zed\AclMerchantPortal\Dependency\Facade\AclMerchantPortalToAclEntityFacadeInterface
27
     */
28
    protected AclMerchantPortalToAclEntityFacadeInterface $aclEntityFacade;
29
30
    /**
31
     * @var list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\MerchantAclEntityRuleExpanderPluginInterface>
32
     */
33
    protected array $merchantAclEntityRuleExpanderPlugins;
34
35
    /**
36
     * @var list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\MerchantUserAclEntityRuleExpanderPluginInterface>
37
     */
38
    protected array $merchantUserAclEntityRuleExpanderPlugins;
39
40
    /**
41
     * @var \Spryker\Zed\AclMerchantPortal\Business\Filter\AclEntityRuleFilterInterface
42
     */
43
    protected AclEntityRuleFilterInterface $aclEntityRuleFilter;
44
45
    /**
46
     * @param \Spryker\Zed\AclMerchantPortal\Dependency\Facade\AclMerchantPortalToAclEntityFacadeInterface $aclEntityFacade
47
     * @param \Spryker\Zed\AclMerchantPortal\Business\Filter\AclEntityRuleFilterInterface $aclEntityRuleFilter
48
     * @param list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\MerchantAclEntityRuleExpanderPluginInterface> $merchantAclEntityRuleExpanderPlugins
49
     * @param list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\MerchantUserAclEntityRuleExpanderPluginInterface> $merchantUserAclEntityRuleExpanderPlugins
50
     */
51
    public function __construct(
52
        AclMerchantPortalToAclEntityFacadeInterface $aclEntityFacade,
53
        AclEntityRuleFilterInterface $aclEntityRuleFilter,
54
        array $merchantAclEntityRuleExpanderPlugins,
55
        array $merchantUserAclEntityRuleExpanderPlugins
56
    ) {
57
        $this->aclEntityFacade = $aclEntityFacade;
58
        $this->merchantAclEntityRuleExpanderPlugins = $merchantAclEntityRuleExpanderPlugins;
0 ignored issues
show
Documentation Bug introduced by
It seems like $merchantAclEntityRuleExpanderPlugins of type array is incompatible with the declared type Spryker\Zed\AclMerchantP...l\Business\Creator\list of property $merchantAclEntityRuleExpanderPlugins.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
59
        $this->merchantUserAclEntityRuleExpanderPlugins = $merchantUserAclEntityRuleExpanderPlugins;
0 ignored issues
show
Documentation Bug introduced by
It seems like $merchantUserAclEntityRuleExpanderPlugins of type array is incompatible with the declared type Spryker\Zed\AclMerchantP...l\Business\Creator\list of property $merchantUserAclEntityRuleExpanderPlugins.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
60
        $this->aclEntityRuleFilter = $aclEntityRuleFilter;
61
    }
62
63
    /**
64
     * @param \Generated\Shared\Transfer\RoleTransfer $roleTransfer
65
     * @param \Generated\Shared\Transfer\AclEntitySegmentTransfer $aclEntitySegmentTransfer
66
     *
67
     * @return list<\Generated\Shared\Transfer\AclEntityRuleTransfer>
68
     */
69
    public function createMerchantAclEntityRules(
70
        RoleTransfer $roleTransfer,
71
        AclEntitySegmentTransfer $aclEntitySegmentTransfer
72
    ): array {
73
        $aclEntityRuleTransfers = $this->executeMerchantAclEntityRuleExpanderPlugins([]);
74
        $aclEntityRuleTransfers = $this->expandAclEntityRulesWithRoleAndSegment($aclEntityRuleTransfers, $roleTransfer, $aclEntitySegmentTransfer);
75
        $aclEntityRuleTransfers = $this->aclEntityRuleFilter->filterOutExistingAclEntityRules($aclEntityRuleTransfers);
76
        if (!$aclEntityRuleTransfers) {
77
            return [];
78
        }
79
80
        $this->aclEntityFacade->saveAclEntityRules(new ArrayObject($aclEntityRuleTransfers));
81
82
        return $aclEntityRuleTransfers;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $aclEntityRuleTransfers returns the type array which is incompatible with the documented return type Spryker\Zed\AclMerchantP...l\Business\Creator\list.
Loading history...
83
    }
84
85
    /**
86
     * @param \Generated\Shared\Transfer\RoleTransfer $roleTransfer
87
     * @param \Generated\Shared\Transfer\AclEntitySegmentTransfer $aclEntitySegmentTransfer
88
     *
89
     * @return list<\Generated\Shared\Transfer\AclEntityRuleTransfer>
90
     */
91
    public function createMerchantUserAclEntityRules(
92
        RoleTransfer $roleTransfer,
93
        AclEntitySegmentTransfer $aclEntitySegmentTransfer
94
    ): array {
95
        $aclEntityRuleTransfers = $this->executeMerchantUserAclEntityRuleExpanderPlugins([]);
96
        $aclEntityRuleTransfers = $this->expandAclEntityRulesWithRoleAndSegment($aclEntityRuleTransfers, $roleTransfer, $aclEntitySegmentTransfer);
97
        $aclEntityRuleTransfers = $this->aclEntityRuleFilter->filterOutExistingAclEntityRules($aclEntityRuleTransfers);
98
        if (!$aclEntityRuleTransfers) {
99
            return [];
100
        }
101
102
        $this->aclEntityFacade->saveAclEntityRules(new ArrayObject($aclEntityRuleTransfers));
103
104
        return $aclEntityRuleTransfers;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $aclEntityRuleTransfers returns the type array which is incompatible with the documented return type Spryker\Zed\AclMerchantP...l\Business\Creator\list.
Loading history...
105
    }
106
107
    /**
108
     * @param list<\Generated\Shared\Transfer\AclEntityRuleTransfer> $aclEntityRuleTransfers
109
     *
110
     * @return list<\Generated\Shared\Transfer\AclEntityRuleTransfer>
111
     */
112
    protected function executeMerchantAclEntityRuleExpanderPlugins(array $aclEntityRuleTransfers): array
113
    {
114
        foreach ($this->merchantAclEntityRuleExpanderPlugins as $merchantAclEntityRuleExpanderPlugin) {
115
            $aclEntityRuleTransfers = $merchantAclEntityRuleExpanderPlugin->expand($aclEntityRuleTransfers);
116
        }
117
118
        return $aclEntityRuleTransfers;
119
    }
120
121
    /**
122
     * @param list<\Generated\Shared\Transfer\AclEntityRuleTransfer> $aclEntityRuleTransfers
123
     *
124
     * @return list<\Generated\Shared\Transfer\AclEntityRuleTransfer>
125
     */
126
    protected function executeMerchantUserAclEntityRuleExpanderPlugins(array $aclEntityRuleTransfers): array
127
    {
128
        foreach ($this->merchantUserAclEntityRuleExpanderPlugins as $merchantUserAclEntityRuleExpanderPlugin) {
129
            $aclEntityRuleTransfers = $merchantUserAclEntityRuleExpanderPlugin->expand($aclEntityRuleTransfers);
130
        }
131
132
        return $aclEntityRuleTransfers;
133
    }
134
135
    /**
136
     * @param list<\Generated\Shared\Transfer\AclEntityRuleTransfer> $aclEntityRuleTransfers
137
     * @param \Generated\Shared\Transfer\RoleTransfer $roleTransfer
138
     * @param \Generated\Shared\Transfer\AclEntitySegmentTransfer $aclEntitySegmentTransfer
139
     *
140
     * @return list<\Generated\Shared\Transfer\AclEntityRuleTransfer>
141
     */
142
    public function expandAclEntityRulesWithRoleAndSegment(
143
        array $aclEntityRuleTransfers,
144
        RoleTransfer $roleTransfer,
145
        AclEntitySegmentTransfer $aclEntitySegmentTransfer
146
    ): array {
147
        foreach ($aclEntityRuleTransfers as $aclEntityRuleTransfer) {
148
            $aclEntityRuleTransfer->setIdAclRole($roleTransfer->getIdAclRole());
149
150
            if ($aclEntityRuleTransfer->getScope() === static::SCOPE_SEGMENT) {
151
                $aclEntityRuleTransfer->setIdAclEntitySegment($aclEntitySegmentTransfer->getIdAclEntitySegmentOrFail());
152
            }
153
        }
154
155
        return $aclEntityRuleTransfers;
156
    }
157
}
158