PluginProbe
User Access Manager / trunk
User Access Manager vtrunk
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 +43 -33 2.3.16trunk View file →
@@ -10,14 +10,43 @@
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 +
14 26 /**
15 - * Returns the map.
16 - * @return array
27 + * @throws Exception
17 28 */
18 - abstract protected function getMap(): array;
29 + private function getRecursiveMembershipByMap(AbstractUserGroup $userGroup, int|string|null $objectId): array
30 + {
31 + $parentMap = $this->getMap()[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType] ?? [];
32 + $recursiveMembership = [];
19 33
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 +
20 49 /**
21 50 * @throws Exception
22 51 */
23 52 protected function getMembershipByMap(
@@ -25,30 +54,11 @@
25 54 bool $lockRecursive,
26 55 int|string|null $objectId,
27 56 ?AssignmentInformation &$assignmentInformation = null
28 57 ): bool {
29 - // Reset value to prevent errors
30 - $recursiveMembership = [];
58 + $recursiveMembership = ($lockRecursive === true) ?
59 + $this->getRecursiveMembershipByMap($userGroup, $objectId) : [];
31 60
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 -
51 61 $isMember = $userGroup->isObjectAssignedToGroup($this->generalObjectType, $objectId, $assignmentInformation);
52 62 return $this->checkAccessWithRecursiveMembership($isMember, $recursiveMembership, $assignmentInformation);
53 63 }
54 64
@@ -58,18 +68,18 @@
58 68 protected function getFullObjectsByMap(AbstractUserGroup $userGroup, bool $lockRecursive, string $objectType): array
59 69 {
60 70 $objects = $this->getSimpleAssignedObjects($userGroup, $objectType);
61 71
62 - if ($lockRecursive === true) {
63 - $map = $this->getMap();
64 - $map = $map[ObjectMapHandler::TREE_MAP_CHILDREN][$objectType] ?? [];
65 - $map = array_intersect_key($map, $objects);
72 + if ($lockRecursive === false) {
73 + return $objects;
74 + }
66 75
67 - foreach ($map as $childrenIds) {
68 - foreach ($childrenIds as $parentId => $type) {
69 - if ($userGroup->isObjectMember($objectType, $parentId) === true) {
70 - $objects[$parentId] = $type;
71 - }
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;
72 82 }
73 83 }
74 84 }
75 85