PluginProbe
User Access Manager / 2.3.12
User Access Manager v2.3.12
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 / UserMembershipHandler.php

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

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