PluginProbe
User Access Manager / 2.3.15
User Access Manager v2.3.15
2.3.20 2.3.19 2.3.18 2.3.17 2.3.16 2.3.15 2.3.14 2.3.13 trunk 0.6 0.6.1 0.6.2 0.7 0.7 Beta 0.7.0.1 0.8 0.8.0.1 0.8.0.2 0.9 0.9.1 0.9.1.1 0.9.1.2 0.9.1.3 0.9.1.4 1.0 All 136 releases
← All changes | src/ObjectMembership/ObjectMembershipWithMapHandler.php +33 -43 trunk2.3.15 View file →
@@ -10,43 +10,14 @@
10 10 use UserAccessManager\UserGroup\AssignmentInformation;
11 11
12 12 abstract class ObjectMembershipWithMapHandler extends ObjectMembershipHandler
13 13 {
14 - abstract protected function getMap(): array;
15 -
16 - protected function getHandledObjectsIncluding(array $objectTypes): array
17 - {
18 - $objectTypeNames = array_keys($objectTypes);
19 -
20 - return array_merge(
21 - parent::getHandledObjects(),
22 - array_combine($objectTypeNames, $objectTypeNames)
23 - );
24 - }
25 -
26 14 /**
27 - * @throws Exception
15 + * Returns the map.
16 + * @return array
28 17 */
29 - private function getRecursiveMembershipByMap(AbstractUserGroup $userGroup, int|string|null $objectId): array
30 - {
31 - $parentMap = $this->getMap()[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType] ?? [];
32 - $recursiveMembership = [];
18 + abstract protected function getMap(): array;
33 19
34 - foreach (array_keys($parentMap[$objectId] ?? []) as $parentId) {
35 - $isObjectMember = $userGroup->isObjectMember(
36 - $this->generalObjectType,
37 - $parentId,
38 - $parentAssignmentInformation
39 - );
40 -
41 - if ($isObjectMember === true) {
42 - $recursiveMembership[$this->generalObjectType][$parentId] = $parentAssignmentInformation;
43 - }
44 - }
45 -
46 - return $recursiveMembership;
47 - }
48 -
49 20 /**
50 21 * @throws Exception
51 22 */
52 23 protected function getMembershipByMap(
@@ -54,11 +25,30 @@
54 25 bool $lockRecursive,
55 26 int|string|null $objectId,
56 27 ?AssignmentInformation &$assignmentInformation = null
57 28 ): bool {
58 - $recursiveMembership = ($lockRecursive === true) ?
59 - $this->getRecursiveMembershipByMap($userGroup, $objectId) : [];
29 + // Reset value to prevent errors
30 + $recursiveMembership = [];
60 31
32 + if ($lockRecursive === true) {
33 + $map = $this->getMap();
34 + $generalMap = $map[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType] ?? [];
35 +
36 + if (isset($generalMap[$objectId]) === true) {
37 + foreach ($generalMap[$objectId] as $parentId => $type) {
38 + $isObjectMember = $userGroup->isObjectMember(
39 + $this->generalObjectType,
40 + $parentId,
41 + $rmAssignmentInformation
42 + );
43 +
44 + if ($isObjectMember === true) {
45 + $recursiveMembership[$this->generalObjectType][$parentId] = $rmAssignmentInformation;
46 + }
47 + }
48 + }
49 + }
50 +
61 51 $isMember = $userGroup->isObjectAssignedToGroup($this->generalObjectType, $objectId, $assignmentInformation);
62 52 return $this->checkAccessWithRecursiveMembership($isMember, $recursiveMembership, $assignmentInformation);
63 53 }
64 54
@@ -68,18 +58,18 @@
68 58 protected function getFullObjectsByMap(AbstractUserGroup $userGroup, bool $lockRecursive, string $objectType): array
69 59 {
70 60 $objects = $this->getSimpleAssignedObjects($userGroup, $objectType);
71 61
72 - if ($lockRecursive === false) {
73 - return $objects;
74 - }
62 + if ($lockRecursive === true) {
63 + $map = $this->getMap();
64 + $map = $map[ObjectMapHandler::TREE_MAP_CHILDREN][$objectType] ?? [];
65 + $map = array_intersect_key($map, $objects);
75 66
76 - $childrenMap = $this->getMap()[ObjectMapHandler::TREE_MAP_CHILDREN][$objectType] ?? [];
77 -
78 - foreach (array_intersect_key($childrenMap, $objects) as $childrenIds) {
79 - foreach ($childrenIds as $parentId => $type) {
80 - if ($userGroup->isObjectMember($objectType, $parentId) === true) {
81 - $objects[$parentId] = $type;
67 + foreach ($map as $childrenIds) {
68 + foreach ($childrenIds as $parentId => $type) {
69 + if ($userGroup->isObjectMember($objectType, $parentId) === true) {
70 + $objects[$parentId] = $type;
71 + }
82 72 }
83 73 }
84 74 }
85 75