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
user-access-manager / src / ObjectMembership / Type / UserMembershipHandler.php

UserMembershipHandler.php in User Access Manager trunk, at src/ObjectMembership/Type/UserMembershipHandler.php

120 lines 3.7 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\Type;
6
7 use Exception;
8 use UserAccessManager\Database\Database;
9 use UserAccessManager\ObjectMembership\ObjectMembershipHandler;
10 use UserAccessManager\Object\ObjectHandler;
11 use UserAccessManager\UserGroup\AbstractUserGroup;
12 use UserAccessManager\UserGroup\AssignmentInformation;
13 use UserAccessManager\UserGroup\AssignmentInformationFactory;
14 use UserAccessManager\Wrapper\Php;
15
16 class UserMembershipHandler extends ObjectMembershipHandler
17 {
18 protected ?string $generalObjectType = ObjectHandler::GENERAL_USER_OBJECT_TYPE;
19
20 public function __construct(
21 AssignmentInformationFactory $assignmentInformationFactory,
22 private Php $php,
23 private Database $database,
24 private ObjectHandler $objectHandler
25 ) {
26 parent::__construct($assignmentInformationFactory);
27 }
28
29 public function getObjectName(int|string|null $objectId, string &$typeName = ''): int|string
30 {
31 $typeName = $this->generalObjectType;
32 $user = $this->objectHandler->getUser($objectId);
33 return ($user !== false) ? $user->display_name : $objectId;
34 }
35
36 private function getUserCapabilities(int|string|null $objectId): array
37 {
38 $user = $this->objectHandler->getUser($objectId);
39
40 if ($user === false) {
41 return [];
42 }
43
44 $capabilitiesTable = $this->database->getCapabilitiesTable();
45 $capabilities = $user->{$capabilitiesTable} ?? [];
46
47 return is_array($capabilities) === true ? $capabilities : [];
48 }
49
50 private function getRecursiveRoleMembership(AbstractUserGroup $userGroup, int|string|null $objectId): array
51 {
52 $capabilities = $this->getUserCapabilities($objectId);
53
54 if ($capabilities === []) {
55 return [];
56 }
57
58 $recursiveRoles = array_intersect(
59 array_keys($capabilities),
60 array_keys($userGroup->getAssignedObjects(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE))
61 );
62
63 if ($recursiveRoles === []) {
64 return [];
65 }
66
67 return [
68 ObjectHandler::GENERAL_ROLE_OBJECT_TYPE => array_combine(
69 $recursiveRoles,
70 $this->php->arrayFill(
71 0,
72 count($recursiveRoles),
73 $this->assignmentInformationFactory->createAssignmentInformation(
74 ObjectHandler::GENERAL_ROLE_OBJECT_TYPE
75 )
76 )
77 )
78 ];
79 }
80
81 public function isMember(
82 AbstractUserGroup $userGroup,
83 bool $lockRecursive,
84 int|string|null $objectId,
85 ?AssignmentInformation &$assignmentInformation = null
86 ): bool {
87 $assignmentInformation = null;
88 $recursiveMembership = $this->getRecursiveRoleMembership($userGroup, $objectId);
89
90 $isMember = $userGroup->isObjectAssignedToGroup(
91 $this->generalObjectType,
92 $objectId,
93 $assignmentInformation
94 );
95
96 return $this->checkAccessWithRecursiveMembership($isMember, $recursiveMembership, $assignmentInformation);
97 }
98
99 /**
100 * @throws Exception
101 */
102 public function getFullObjects(AbstractUserGroup $userGroup, bool $lockRecursive, ?string $objectType = null): array
103 {
104 $users = [];
105
106 $databaseUsers = (array) $this->database->getResults(
107 "SELECT `ID`, `user_nicename`
108 FROM `{$this->database->getUsersTable()}`"
109 );
110
111 foreach ($databaseUsers as $user) {
112 if ($userGroup->isObjectMember($this->generalObjectType, $user->ID) === true) {
113 $users[$user->ID] = $this->generalObjectType;
114 }
115 }
116
117 return $users;
118 }
119 }
120