# user-access-manager/trunk/src/ObjectMembership/ObjectMembershipHandler.php

User Access Manager, version trunk. 90 lines.

- Page: https://pluginprobe.com/plugins/user-access-manager/trunk/code/src/ObjectMembership/ObjectMembershipHandler.php
- Raw: https://pluginprobe.com/plugins/user-access-manager/trunk/raw/src/ObjectMembership/ObjectMembershipHandler.php
- Modified: 2026-08-06T11:11:24+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/user-access-manager/trunk/code/src/ObjectMembership/ObjectMembershipHandler.php#L10-L20`.

```php
<?php

declare(strict_types=1);

namespace UserAccessManager\ObjectMembership;

use Exception;
use UserAccessManager\ObjectMembership\Exception\MissingObjectTypeException;
use UserAccessManager\UserGroup\AbstractUserGroup;
use UserAccessManager\UserGroup\AssignmentInformation;
use UserAccessManager\UserGroup\AssignmentInformationFactory;

abstract class ObjectMembershipHandler
{
    protected ?string $generalObjectType = null;

    /**
     * @throws Exception
     */
    public function __construct(
        protected AssignmentInformationFactory $assignmentInformationFactory
    ) {
        if ($this->generalObjectType === null) {
            throw new MissingObjectTypeException('Missing general object type, Object type must be set.');
        }
    }

    abstract public function getObjectName(int|string|null $objectId, string &$typeName = ''): int|string;

    public function getGeneralObjectType(): string
    {
        return $this->generalObjectType;
    }

    public function getHandledObjects(): array
    {
        return [$this->generalObjectType => $this->generalObjectType];
    }

    public function handlesObject(mixed $objectType): bool
    {
        return isset($this->getHandledObjects()[$objectType]);
    }

    protected function assignRecursiveMembership(
        ?AssignmentInformation &$assignmentInformation,
        array $recursiveMembership
    ): void {
        if ($assignmentInformation === null) {
            $assignmentInformation = $this->assignmentInformationFactory->createAssignmentInformation();
        }

        $assignmentInformation->setRecursiveMembership($recursiveMembership);
    }

    protected function checkAccessWithRecursiveMembership(
        bool $isMember,
        array $recursiveMembership,
        ?AssignmentInformation &$assignmentInformation
    ): bool {
        if ($isMember === true || count($recursiveMembership) > 0) {
            $this->assignRecursiveMembership($assignmentInformation, $recursiveMembership);
            return true;
        }

        return false;
    }

    protected function getSimpleAssignedObjects(AbstractUserGroup $userGroup, string $objectType): array
    {
        return array_map(
            fn(AssignmentInformation $assignmentInformation) => $assignmentInformation->getType(),
            $userGroup->getAssignedObjects($objectType)
        );
    }

    abstract public function isMember(
        AbstractUserGroup $userGroup,
        bool $lockRecursive,
        int|string|null $objectId,
        ?AssignmentInformation &$assignmentInformation = null
    ): bool;

    abstract public function getFullObjects(
        AbstractUserGroup $userGroup,
        bool $lockRecursive,
        ?string $objectType = null
    ): array;
}

```
