PluginProbe
User Access Manager / 2.3.20
User Access Manager v2.3.20
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
user-access-manager / src / ObjectMembership / ObjectMembershipWithMapHandler.php

ObjectMembershipWithMapHandler.php in User Access Manager 2.3.20, at src/ObjectMembership/ObjectMembershipWithMapHandler.php

89 lines 2.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace UserAccessManager\ObjectMembership;
6
7 use Exception;
8 use UserAccessManager\Object\ObjectMapHandler;
9 use UserAccessManager\UserGroup\AbstractUserGroup;
10 use UserAccessManager\UserGroup\AssignmentInformation;
11
12 abstract class ObjectMembershipWithMapHandler extends ObjectMembershipHandler
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 /**
27 * @throws Exception
28 */
29 private function getRecursiveMembershipByMap(AbstractUserGroup $userGroup, int|string|null $objectId): array
30 {
31 $parentMap = $this->getMap()[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType] ?? [];
32 $recursiveMembership = [];
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
49 /**
50 * @throws Exception
51 */
52 protected function getMembershipByMap(
53 AbstractUserGroup $userGroup,
54 bool $lockRecursive,
55 int|string|null $objectId,
56 ?AssignmentInformation &$assignmentInformation = null
57 ): bool {
58 $recursiveMembership = ($lockRecursive === true) ?
59 $this->getRecursiveMembershipByMap($userGroup, $objectId) : [];
60
61 $isMember = $userGroup->isObjectAssignedToGroup($this->generalObjectType, $objectId, $assignmentInformation);
62 return $this->checkAccessWithRecursiveMembership($isMember, $recursiveMembership, $assignmentInformation);
63 }
64
65 /**
66 * @throws Exception
67 */
68 protected function getFullObjectsByMap(AbstractUserGroup $userGroup, bool $lockRecursive, string $objectType): array
69 {
70 $objects = $this->getSimpleAssignedObjects($userGroup, $objectType);
71
72 if ($lockRecursive === false) {
73 return $objects;
74 }
75
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;
82 }
83 }
84 }
85
86 return $objects;
87 }
88 }
89