Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
AddUserRoleMembershipEndpoint
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 1
 configure
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 handle
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace Olz\Roles\Endpoints;
4
5use Olz\Api\OlzAddRelationTypedEndpoint;
6use PhpTypeScriptApi\HttpError;
7
8/**
9 * @phpstan-import-type OlzRoleMembershipIds from UserRoleMembershipEndpointTrait
10 *
11 * @extends OlzAddRelationTypedEndpoint<OlzRoleMembershipIds>
12 */
13class AddUserRoleMembershipEndpoint extends OlzAddRelationTypedEndpoint {
14    use UserRoleMembershipEndpointTrait;
15
16    public function configure(): void {
17        parent::configure();
18        $this->phpStanUtils->registerTypeImport(UserRoleMembershipEndpointTrait::class);
19    }
20
21    protected function handle(mixed $input): mixed {
22        $role = $this->getRoleEntityById($input['ids']['roleId']);
23        $user = $this->getUserEntityById($input['ids']['userId']);
24
25        $is_superior = $this->authUtils()->hasRoleEditPermission($input['ids']['roleId']);
26        $is_owner = $this->entityUtils()->canUpdateOlzEntity($role, null, 'roles');
27        if (!$is_superior && !$is_owner) {
28            throw new HttpError(403, "Kein Zugriff!");
29        }
30
31        $role->addUser($user);
32        $user->addRole($role);
33        $this->entityManager()->persist($role);
34        $this->entityManager()->persist($user);
35        $this->entityManager()->flush();
36
37        return [];
38    }
39}