Completed
Push — ezp-30696 ( 9bb3ad...3bd812 )
by
unknown
49:02 queued 18:35
created

Role::listRoles()   B

Complexity

Conditions 7
Paths 7

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
nc 7
nop 1
dl 0
loc 23
rs 8.6186
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the Role controller class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Publish\Core\REST\Server\Controller;
10
11
use eZ\Publish\API\Repository\Exceptions\LimitationValidationException;
12
use eZ\Publish\API\Repository\Exceptions\NotFoundException;
13
use eZ\Publish\Core\Base\Exceptions\ForbiddenException;
14
use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
15
use eZ\Publish\Core\Base\Exceptions\UnauthorizedException;
16
use eZ\Publish\Core\REST\Common\Message;
17
use eZ\Publish\Core\REST\Common\Exceptions;
18
use eZ\Publish\Core\REST\Server\Exceptions\BadRequestException;
19
use eZ\Publish\Core\REST\Server\Values;
20
use eZ\Publish\Core\REST\Server\Controller as RestController;
21
use eZ\Publish\API\Repository\RoleService;
22
use eZ\Publish\API\Repository\UserService;
23
use eZ\Publish\API\Repository\LocationService;
24
use eZ\Publish\API\Repository\Values\User\RoleCreateStruct;
25
use eZ\Publish\API\Repository\Values\User\RoleUpdateStruct;
26
use eZ\Publish\API\Repository\Exceptions\NotFoundException as APINotFoundException;
27
use Symfony\Component\HttpFoundation\Request;
28
29
/**
30
 * Role controller.
31
 */
32
class Role extends RestController
33
{
34
    /**
35
     * Role service.
36
     *
37
     * @var \eZ\Publish\API\Repository\RoleService
38
     */
39
    protected $roleService;
40
41
    /**
42
     * User service.
43
     *
44
     * @var \eZ\Publish\API\Repository\UserService
45
     */
46
    protected $userService;
47
48
    /**
49
     * Location service.
50
     *
51
     * @var \eZ\Publish\API\Repository\LocationService
52
     */
53
    protected $locationService;
54
55
    /**
56
     * Construct controller.
57
     *
58
     * @param \eZ\Publish\API\Repository\RoleService $roleService
59
     * @param \eZ\Publish\API\Repository\UserService $userService
60
     * @param \eZ\Publish\API\Repository\LocationService $locationService
61
     */
62
    public function __construct(
63
        RoleService $roleService,
64
        UserService $userService,
65
        LocationService $locationService
66
    ) {
67
        $this->roleService = $roleService;
68
        $this->userService = $userService;
69
        $this->locationService = $locationService;
70
    }
71
72
    /**
73
     * Create new role.
74
     *
75
     * Defaults to publishing the role, but you can create a draft instead by setting the POST parameter publish=false
76
     *
77
     * @return \eZ\Publish\Core\REST\Server\Values\CreatedRole
78
     */
79
    public function createRole(Request $request)
80
    {
81
        $publish = (
82
            !$request->query->has('publish') ||
83
            ($request->query->has('publish') && $request->query->get('publish') === 'true')
84
        );
85
86
        try {
87
            $roleDraft = $this->roleService->createRole(
88
                $this->inputDispatcher->parse(
0 ignored issues
show
Compatibility introduced by
$this->inputDispatcher->...request->getContent())) of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...\User\RoleCreateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
89
                    new Message(
90
                        [
91
                            'Content-Type' => $request->headers->get('Content-Type'),
92
                            // @todo Needs refactoring! Temporary solution so parser has access to get parameters
93
                            '__publish' => $publish,
94
                        ],
95
                        $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
96
                    )
97
                )
98
            );
99
        } catch (InvalidArgumentException $e) {
100
            throw new ForbiddenException($e->getMessage());
101
        } catch (UnauthorizedException $e) {
102
            throw new ForbiddenException($e->getMessage());
103
        } catch (LimitationValidationException $e) {
104
            throw new BadRequestException($e->getMessage());
105
        } catch (Exceptions\Parser $e) {
106
            throw new BadRequestException($e->getMessage());
107
        }
108
109
        if ($publish) {
110
            @trigger_error(
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
111
                "Create and publish role in the same operation is deprecated, and will be removed in the future.\n" .
112
                'Instead, publish the role draft using Role::publishRoleDraft().',
113
                E_USER_DEPRECATED
114
            );
115
116
            $this->roleService->publishRoleDraft($roleDraft);
117
118
            $role = $this->roleService->loadRole($roleDraft->id);
119
120
            return new Values\CreatedRole(['role' => new Values\RestRole($role)]);
121
        }
122
123
        return new Values\CreatedRole(['role' => new Values\RestRole($roleDraft)]);
124
    }
125
126
    /**
127
     * Creates a new RoleDraft for an existing Role.
128
     *
129
     * @since 6.2
130
     *
131
     * @throws \eZ\Publish\API\Repository\Exceptions\ForbiddenException if the Role already has a Role Draft that will need to be removed first,
132
     *                                                                  or if the authenticated user is not allowed to create a role
133
     * @throws \eZ\Publish\Core\REST\Server\Exceptions\BadRequestException if a policy limitation in the $roleCreateStruct is not valid
134
     *
135
     * @return \eZ\Publish\Core\REST\Server\Values\CreatedRole
136
     */
137
    public function createRoleDraft($roleId, Request $request)
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
138
    {
139
        try {
140
            $roleDraft = $this->roleService->createRoleDraft(
141
                $this->roleService->loadRole($roleId)
142
            );
143
        } catch (InvalidArgumentException $e) {
144
            throw new ForbiddenException($e->getMessage());
145
        } catch (UnauthorizedException $e) {
146
            throw new ForbiddenException($e->getMessage());
147
        } catch (LimitationValidationException $e) {
148
            throw new BadRequestException($e->getMessage());
149
        } catch (Exceptions\Parser $e) {
150
            throw new BadRequestException($e->getMessage());
151
        }
152
153
        return new Values\CreatedRole(['role' => new Values\RestRole($roleDraft)]);
154
    }
155
156
    /**
157
     * Loads list of roles.
158
     *
159
     * @return \eZ\Publish\Core\REST\Server\Values\RoleList
160
     */
161
    public function listRoles(Request $request)
162
    {
163
        $roles = [];
164
        if ($request->query->has('identifier')) {
165
            try {
166
                $role = $this->roleService->loadRoleByIdentifier($request->query->get('identifier'));
167
                $roles[] = $role;
168
            } catch (APINotFoundException $e) {
169
                // Do nothing
170
            }
171
        } else {
172
            $offset = $request->query->has('offset') ? (int)$request->query->get('offset') : 0;
173
            $limit = $request->query->has('limit') ? (int)$request->query->get('limit') : -1;
174
175
            $roles = array_slice(
176
                $this->roleService->loadRoles(),
177
                $offset >= 0 ? $offset : 0,
178
                $limit >= 0 ? $limit : null
179
            );
180
        }
181
182
        return new Values\RoleList($roles, $request->getPathInfo());
183
    }
184
185
    /**
186
     * Loads role.
187
     *
188
     * @param $roleId
189
     *
190
     * @return \eZ\Publish\API\Repository\Values\User\Role
191
     */
192
    public function loadRole($roleId)
193
    {
194
        return $this->roleService->loadRole($roleId);
195
    }
196
197
    /**
198
     * Loads a role draft.
199
     *
200
     * @param mixed $roleId Original role ID, or ID of the role draft itself
201
     *
202
     * @return \eZ\Publish\API\Repository\Values\User\RoleDraft
203
     */
204
    public function loadRoleDraft($roleId)
205
    {
206
        try {
207
            // First try to load the draft for given role.
208
            return $this->roleService->loadRoleDraftByRoleId($roleId);
209
        } catch (NotFoundException $e) {
210
            // We might want a newly created role, so try to load it by its ID.
211
            // loadRoleDraft() might throw a NotFoundException (wrong $roleId). If so, let it bubble up.
212
            return $this->roleService->loadRoleDraft($roleId);
213
        }
214
    }
215
216
    /**
217
     * Updates a role.
218
     *
219
     * @param $roleId
220
     *
221
     * @return \eZ\Publish\API\Repository\Values\User\Role
222
     */
223
    public function updateRole($roleId, Request $request)
224
    {
225
        $createStruct = $this->inputDispatcher->parse(
226
            new Message(
227
                ['Content-Type' => $request->headers->get('Content-Type')],
228
                $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
229
            )
230
        );
231
232
        return $this->roleService->updateRole(
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...leService::updateRole() has been deprecated with message: since 6.0, use {@see updateRoleDraft}

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
233
            $this->roleService->loadRole($roleId),
234
            $this->mapToUpdateStruct($createStruct)
0 ignored issues
show
Compatibility introduced by
$createStruct of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...\User\RoleCreateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
235
        );
236
    }
237
238
    /**
239
     * Updates a role draft.
240
     *
241
     * @param mixed $roleId Original role ID, or ID of the role draft itself
242
     *
243
     * @return \eZ\Publish\API\Repository\Values\User\RoleDraft
244
     */
245
    public function updateRoleDraft($roleId, Request $request)
246
    {
247
        $createStruct = $this->inputDispatcher->parse(
248
            new Message(
249
                ['Content-Type' => $request->headers->get('Content-Type')],
250
                $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
251
            )
252
        );
253
254
        try {
255
            // First try to load the draft for given role.
256
            $roleDraft = $this->roleService->loadRoleDraftByRoleId($roleId);
257
        } catch (NotFoundException $e) {
258
            // We might want a newly created role, so try to load it by its ID.
259
            // loadRoleDraft() might throw a NotFoundException (wrong $roleId). If so, let it bubble up.
260
            $roleDraft = $this->roleService->loadRoleDraft($roleId);
261
        }
262
263
        return $this->roleService->updateRoleDraft($roleDraft, $this->mapToUpdateStruct($createStruct));
0 ignored issues
show
Compatibility introduced by
$createStruct of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...\User\RoleCreateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
264
    }
265
266
    /**
267
     * Publishes a role draft.
268
     *
269
     * @param mixed $roleId Original role ID, or ID of the role draft itself
270
     *
271
     * @return \eZ\Publish\Core\REST\Server\Values\PublishedRole
272
     */
273
    public function publishRoleDraft($roleId)
274
    {
275
        try {
276
            // First try to load the draft for given role.
277
            $roleDraft = $this->roleService->loadRoleDraftByRoleId($roleId);
278
        } catch (NotFoundException $e) {
279
            // We might want a newly created role, so try to load it by its ID.
280
            // loadRoleDraft() might throw a NotFoundException (wrong $roleId). If so, let it bubble up.
281
            $roleDraft = $this->roleService->loadRoleDraft($roleId);
282
        }
283
284
        $this->roleService->publishRoleDraft($roleDraft);
285
286
        $role = $this->roleService->loadRole($roleId);
287
288
        return new Values\PublishedRole(['role' => new Values\RestRole($role)]);
289
    }
290
291
    /**
292
     * Delete a role by ID.
293
     *
294
     * @param $roleId
295
     *
296
     * @return \eZ\Publish\Core\REST\Server\Values\NoContent
297
     */
298
    public function deleteRole($roleId)
299
    {
300
        $this->roleService->deleteRole(
301
            $this->roleService->loadRole($roleId)
302
        );
303
304
        return new Values\NoContent();
305
    }
306
307
    /**
308
     * Delete a role draft by ID.
309
     *
310
     * @since 6.2
311
     *
312
     * @param $roleId
313
     *
314
     * @return \eZ\Publish\Core\REST\Server\Values\NoContent
315
     */
316
    public function deleteRoleDraft($roleId)
317
    {
318
        $this->roleService->deleteRoleDraft(
319
            $this->roleService->loadRoleDraft($roleId)
320
        );
321
322
        return new Values\NoContent();
323
    }
324
325
    /**
326
     * Loads the policies for the role.
327
     *
328
     * @param $roleId
329
     *
330
     * @return \eZ\Publish\Core\REST\Server\Values\PolicyList
331
     */
332
    public function loadPolicies($roleId, Request $request)
333
    {
334
        $loadedRole = $this->roleService->loadRole($roleId);
335
336
        return new Values\PolicyList($loadedRole->getPolicies(), $request->getPathInfo());
337
    }
338
339
    /**
340
     * Deletes all policies from a role.
341
     *
342
     * @param $roleId
343
     *
344
     * @return \eZ\Publish\Core\REST\Server\Values\NoContent
345
     */
346
    public function deletePolicies($roleId)
347
    {
348
        $loadedRole = $this->roleService->loadRole($roleId);
349
350
        foreach ($loadedRole->getPolicies() as $policy) {
351
            $this->roleService->deletePolicy($policy);
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...Service::deletePolicy() has been deprecated with message: since 6.0, use {@link removePolicyByRoleDraft()} instead.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
352
        }
353
354
        return new Values\NoContent();
355
    }
356
357
    /**
358
     * Loads a policy.
359
     *
360
     * @param $roleId
361
     * @param $policyId
362
     *
363
     * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException
364
     *
365
     * @return \eZ\Publish\API\Repository\Values\User\Policy
366
     */
367
    public function loadPolicy($roleId, $policyId, Request $request)
368
    {
369
        $loadedRole = $this->roleService->loadRole($roleId);
370
        foreach ($loadedRole->getPolicies() as $policy) {
371
            if ($policy->id == $policyId) {
372
                return $policy;
373
            }
374
        }
375
376
        throw new Exceptions\NotFoundException("Policy not found: '{$request->getPathInfo()}'.");
377
    }
378
379
    /**
380
     * Adds a policy to role.
381
     *
382
     * @param $roleId int ID of a role or a role draft
383
     *
384
     * @return \eZ\Publish\Core\REST\Server\Values\CreatedPolicy
385
     */
386
    public function addPolicy($roleId, Request $request)
387
    {
388
        $createStruct = $this->inputDispatcher->parse(
389
            new Message(
390
                ['Content-Type' => $request->headers->get('Content-Type')],
391
                $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
392
            )
393
        );
394
395
        try {
396
            // First try to treat $roleId as a role draft ID.
397
            $role = $this->roleService->addPolicyByRoleDraft(
398
                $this->roleService->loadRoleDraft($roleId),
399
                $createStruct
0 ignored issues
show
Compatibility introduced by
$createStruct of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...ser\PolicyCreateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
400
            );
401
        } catch (NotFoundException $e) {
402
            // Then try to treat $roleId as a role ID.
403
            $role = $this->roleService->addPolicy(
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repository\RoleService::addPolicy() has been deprecated with message: since 6.0, use {@see addPolicyByRoleDraft}

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
404
                $this->roleService->loadRole($roleId),
405
                $createStruct
0 ignored issues
show
Compatibility introduced by
$createStruct of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...ser\PolicyCreateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
406
            );
407
        } catch (LimitationValidationException $e) {
408
            throw new BadRequestException($e->getMessage());
409
        }
410
411
        return new Values\CreatedPolicy(
412
            [
413
                'policy' => $this->getLastAddedPolicy($role),
414
            ]
415
        );
416
    }
417
418
    /**
419
     * Adds a policy to a role draft.
420
     *
421
     * @since 6.2
422
     * @deprecated since 6.3, use {@see addPolicy}
423
     *
424
     * @param $roleId
425
     *
426
     * @return \eZ\Publish\Core\REST\Server\Values\CreatedPolicy
427
     */
428
    public function addPolicyByRoleDraft($roleId, Request $request)
429
    {
430
        $createStruct = $this->inputDispatcher->parse(
431
            new Message(
432
                ['Content-Type' => $request->headers->get('Content-Type')],
433
                $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
434
            )
435
        );
436
437
        try {
438
            $role = $this->roleService->addPolicyByRoleDraft(
439
                $this->roleService->loadRoleDraft($roleId),
440
                $createStruct
0 ignored issues
show
Compatibility introduced by
$createStruct of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...ser\PolicyCreateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
441
            );
442
        } catch (LimitationValidationException $e) {
443
            throw new BadRequestException($e->getMessage());
444
        }
445
446
        return new Values\CreatedPolicy(
447
            [
448
                'policy' => $this->getLastAddedPolicy($role),
449
            ]
450
        );
451
    }
452
453
    /**
454
     * Get the last added policy for $role.
455
     *
456
     * This is needed because the RoleService addPolicy() and addPolicyByRoleDraft() methods return the role,
457
     * not the policy.
458
     *
459
     * @param $role \eZ\Publish\API\Repository\Values\User\Role
460
     *
461
     * @return \eZ\Publish\API\Repository\Values\User\Policy
462
     */
463
    private function getLastAddedPolicy($role)
464
    {
465
        $policies = $role->getPolicies();
466
467
        $policyToReturn = $policies[0];
468
        for ($i = 1, $count = count($policies); $i < $count; ++$i) {
469
            if ($policies[$i]->id > $policyToReturn->id) {
470
                $policyToReturn = $policies[$i];
471
            }
472
        }
473
474
        return $policyToReturn;
475
    }
476
477
    /**
478
     * Updates a policy.
479
     *
480
     * @param $roleId int ID of a role or a role draft
481
     * @param $policyId int ID of a policy
482
     *
483
     * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException
484
     *
485
     * @return \eZ\Publish\API\Repository\Values\User\Policy
486
     */
487
    public function updatePolicy($roleId, $policyId, Request $request)
488
    {
489
        $updateStruct = $this->inputDispatcher->parse(
490
            new Message(
491
                ['Content-Type' => $request->headers->get('Content-Type')],
492
                $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
493
            )
494
        );
495
496
        try {
497
            // First try to treat $roleId as a role draft ID.
498
            $role = $this->roleService->loadRoleDraft($roleId);
499 View Code Duplication
            foreach ($role->getPolicies() as $policy) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
500
                if ($policy->id == $policyId) {
501
                    try {
502
                        return $this->roleService->updatePolicy(
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...Service::updatePolicy() has been deprecated with message: since 6.0, use {@link updatePolicyByRoleDraft()} instead.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
503
                            $policy,
504
                            $updateStruct
0 ignored issues
show
Compatibility introduced by
$updateStruct of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...ser\PolicyUpdateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
505
                        );
506
                    } catch (LimitationValidationException $e) {
507
                        throw new BadRequestException($e->getMessage());
508
                    }
509
                }
510
            }
511
        } catch (NotFoundException $e) {
512
            // Then try to treat $roleId as a role ID.
513
            $role = $this->roleService->loadRole($roleId);
514 View Code Duplication
            foreach ($role->getPolicies() as $policy) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
515
                if ($policy->id == $policyId) {
516
                    try {
517
                        return $this->roleService->updatePolicy(
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...Service::updatePolicy() has been deprecated with message: since 6.0, use {@link updatePolicyByRoleDraft()} instead.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
518
                            $policy,
519
                            $updateStruct
0 ignored issues
show
Compatibility introduced by
$updateStruct of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...ser\PolicyUpdateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
520
                        );
521
                    } catch (LimitationValidationException $e) {
522
                        throw new BadRequestException($e->getMessage());
523
                    }
524
                }
525
            }
526
        }
527
528
        throw new Exceptions\NotFoundException("Policy not found: '{$request->getPathInfo()}'.");
529
    }
530
531
    /**
532
     * Updates a policy.
533
     *
534
     * @since 6.2
535
     * @deprecated since 6.3, use {@see updatePolicy}
536
     *
537
     * @param $roleId
538
     * @param $policyId
539
     *
540
     * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException
541
     *
542
     * @return \eZ\Publish\API\Repository\Values\User\Policy
543
     */
544
    public function updatePolicyByRoleDraft($roleId, $policyId, Request $request)
545
    {
546
        $updateStruct = $this->inputDispatcher->parse(
547
            new Message(
548
                ['Content-Type' => $request->headers->get('Content-Type')],
549
                $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
550
            )
551
        );
552
553
        $role = $this->roleService->loadRoleDraft($roleId);
554 View Code Duplication
        foreach ($role->getPolicies() as $policy) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
555
            if ($policy->id == $policyId) {
556
                try {
557
                    return $this->roleService->updatePolicy(
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...Service::updatePolicy() has been deprecated with message: since 6.0, use {@link updatePolicyByRoleDraft()} instead.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
558
                        $policy,
559
                        $updateStruct
0 ignored issues
show
Compatibility introduced by
$updateStruct of type object<eZ\Publish\API\Re...ory\Values\ValueObject> is not a sub-type of object<eZ\Publish\API\Re...ser\PolicyUpdateStruct>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\ValueObject to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
560
                    );
561
                } catch (LimitationValidationException $e) {
562
                    throw new BadRequestException($e->getMessage());
563
                }
564
            }
565
        }
566
567
        throw new Exceptions\NotFoundException("Policy not found: '{$request->getPathInfo()}'.");
568
    }
569
570
    /**
571
     * Delete a policy from role.
572
     *
573
     * @param $roleId int ID of a role or a role draft
574
     * @param $policyId int ID of a policy
575
     *
576
     * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException
577
     *
578
     * @return \eZ\Publish\Core\REST\Server\Values\NoContent
579
     */
580
    public function deletePolicy($roleId, $policyId, Request $request)
581
    {
582
        try {
583
            // First try to treat $roleId as a role draft ID.
584
            $roleDraft = $this->roleService->loadRoleDraft($roleId);
585
586
            $policy = null;
587
            foreach ($roleDraft->getPolicies() as $rolePolicy) {
588
                if ($rolePolicy->id == $policyId) {
589
                    $policy = $rolePolicy;
590
                    break;
591
                }
592
            }
593
594
            if ($policy !== null) {
595
                $this->roleService->removePolicyByRoleDraft($roleDraft, $policy);
0 ignored issues
show
Compatibility introduced by
$policy of type object<eZ\Publish\API\Re...ory\Values\User\Policy> is not a sub-type of object<eZ\Publish\API\Re...alues\User\PolicyDraft>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\User\Policy to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
596
597
                return new Values\NoContent();
598
            }
599
        } catch (NotFoundException $e) {
600
            // Then try to treat $roleId as a role ID.
601
            $role = $this->roleService->loadRole($roleId);
602
603
            $policy = null;
604
            foreach ($role->getPolicies() as $rolePolicy) {
605
                if ($rolePolicy->id == $policyId) {
606
                    $policy = $rolePolicy;
607
                    break;
608
                }
609
            }
610
611
            if ($policy !== null) {
612
                $this->roleService->deletePolicy($policy);
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...Service::deletePolicy() has been deprecated with message: since 6.0, use {@link removePolicyByRoleDraft()} instead.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
613
614
                return new Values\NoContent();
615
            }
616
        }
617
618
        throw new Exceptions\NotFoundException("Policy not found: '{$request->getPathInfo()}'.");
619
    }
620
621
    /**
622
     * Remove a policy from a role draft.
623
     *
624
     * @since 6.2
625
     * @deprecated since 6.3, use {@see deletePolicy}
626
     *
627
     * @param $roleId
628
     * @param $policyId
629
     *
630
     * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException
631
     *
632
     * @return \eZ\Publish\Core\REST\Server\Values\NoContent
633
     */
634 View Code Duplication
    public function removePolicyByRoleDraft($roleId, $policyId, Request $request)
635
    {
636
        $roleDraft = $this->roleService->loadRoleDraft($roleId);
637
638
        $policy = null;
639
        foreach ($roleDraft->getPolicies() as $rolePolicy) {
640
            if ($rolePolicy->id == $policyId) {
641
                $policy = $rolePolicy;
642
                break;
643
            }
644
        }
645
646
        if ($policy !== null) {
647
            $this->roleService->removePolicyByRoleDraft($roleDraft, $policy);
0 ignored issues
show
Compatibility introduced by
$policy of type object<eZ\Publish\API\Re...ory\Values\User\Policy> is not a sub-type of object<eZ\Publish\API\Re...alues\User\PolicyDraft>. It seems like you assume a child class of the class eZ\Publish\API\Repository\Values\User\Policy to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
648
649
            return new Values\NoContent();
650
        }
651
652
        throw new Exceptions\NotFoundException("Policy not found: '{$request->getPathInfo()}'.");
653
    }
654
655
    /**
656
     * Assigns role to user.
657
     *
658
     * @param $userId
659
     *
660
     * @return \eZ\Publish\Core\REST\Server\Values\RoleAssignmentList
661
     */
662
    public function assignRoleToUser($userId, Request $request)
663
    {
664
        $roleAssignment = $this->inputDispatcher->parse(
665
            new Message(
666
                ['Content-Type' => $request->headers->get('Content-Type')],
667
                $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
668
            )
669
        );
670
671
        $user = $this->userService->loadUser($userId);
672
        $role = $this->roleService->loadRole($roleAssignment->roleId);
0 ignored issues
show
Documentation introduced by
The property roleId does not exist on object<eZ\Publish\API\Re...ory\Values\ValueObject>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
673
674
        try {
675
            $this->roleService->assignRoleToUser($role, $user, $roleAssignment->limitation);
0 ignored issues
show
Documentation introduced by
The property limitation does not exist on object<eZ\Publish\API\Re...ory\Values\ValueObject>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
676
        } catch (LimitationValidationException $e) {
677
            throw new BadRequestException($e->getMessage());
678
        }
679
680
        $roleAssignments = $this->roleService->getRoleAssignmentsForUser($user);
681
682
        return new Values\RoleAssignmentList($roleAssignments, $user->id);
683
    }
684
685
    /**
686
     * Assigns role to user group.
687
     *
688
     * @param $groupPath
689
     *
690
     * @return \eZ\Publish\Core\REST\Server\Values\RoleAssignmentList
691
     */
692
    public function assignRoleToUserGroup($groupPath, Request $request)
693
    {
694
        $roleAssignment = $this->inputDispatcher->parse(
695
            new Message(
696
                ['Content-Type' => $request->headers->get('Content-Type')],
697
                $request->getContent()
0 ignored issues
show
Bug introduced by
It seems like $request->getContent() targeting Symfony\Component\HttpFo...n\Request::getContent() can also be of type resource; however, eZ\Publish\Core\REST\Common\Message::__construct() does only seem to accept string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
698
            )
699
        );
700
701
        $groupLocationParts = explode('/', $groupPath);
702
        $groupLocation = $this->locationService->loadLocation(array_pop($groupLocationParts));
703
        $userGroup = $this->userService->loadUserGroup($groupLocation->contentId);
704
705
        $role = $this->roleService->loadRole($roleAssignment->roleId);
0 ignored issues
show
Documentation introduced by
The property roleId does not exist on object<eZ\Publish\API\Re...ory\Values\ValueObject>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
706
707
        try {
708
            $this->roleService->assignRoleToUserGroup($role, $userGroup, $roleAssignment->limitation);
0 ignored issues
show
Documentation introduced by
The property limitation does not exist on object<eZ\Publish\API\Re...ory\Values\ValueObject>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
709
        } catch (LimitationValidationException $e) {
710
            throw new BadRequestException($e->getMessage());
711
        }
712
713
        $roleAssignments = $this->roleService->getRoleAssignmentsForUserGroup($userGroup);
714
715
        return new Values\RoleAssignmentList($roleAssignments, $groupPath, true);
716
    }
717
718
    /**
719
     * Un-assigns role from user.
720
     *
721
     * @param $userId
722
     * @param $roleId
723
     *
724
     * @return \eZ\Publish\Core\REST\Server\Values\RoleAssignmentList
725
     */
726
    public function unassignRoleFromUser($userId, $roleId)
727
    {
728
        $user = $this->userService->loadUser($userId);
729
        $role = $this->roleService->loadRole($roleId);
730
731
        $this->roleService->unassignRoleFromUser($role, $user);
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...:unassignRoleFromUser() has been deprecated with message: since 6.0, use {@see removeRoleAssignment} instead.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
732
733
        $roleAssignments = $this->roleService->getRoleAssignmentsForUser($user);
734
735
        return new Values\RoleAssignmentList($roleAssignments, $user->id);
736
    }
737
738
    /**
739
     * Un-assigns role from user group.
740
     *
741
     * @param $groupPath
742
     * @param $roleId
743
     *
744
     * @return \eZ\Publish\Core\REST\Server\Values\RoleAssignmentList
745
     */
746
    public function unassignRoleFromUserGroup($groupPath, $roleId)
747
    {
748
        $groupLocationParts = explode('/', $groupPath);
749
        $groupLocation = $this->locationService->loadLocation(array_pop($groupLocationParts));
750
        $userGroup = $this->userService->loadUserGroup($groupLocation->contentId);
751
752
        $role = $this->roleService->loadRole($roleId);
753
        $this->roleService->unassignRoleFromUserGroup($role, $userGroup);
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...signRoleFromUserGroup() has been deprecated with message: since 6.0, use {@see removeRoleAssignment} instead.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
754
755
        $roleAssignments = $this->roleService->getRoleAssignmentsForUserGroup($userGroup);
756
757
        return new Values\RoleAssignmentList($roleAssignments, $groupPath, true);
758
    }
759
760
    /**
761
     * Loads role assignments for user.
762
     *
763
     * @param $userId
764
     *
765
     * @return \eZ\Publish\Core\REST\Server\Values\RoleAssignmentList
766
     */
767
    public function loadRoleAssignmentsForUser($userId)
768
    {
769
        $user = $this->userService->loadUser($userId);
770
771
        $roleAssignments = $this->roleService->getRoleAssignmentsForUser($user);
772
773
        return new Values\RoleAssignmentList($roleAssignments, $user->id);
774
    }
775
776
    /**
777
     * Loads role assignments for user group.
778
     *
779
     * @param $groupPath
780
     *
781
     * @return \eZ\Publish\Core\REST\Server\Values\RoleAssignmentList
782
     */
783
    public function loadRoleAssignmentsForUserGroup($groupPath)
784
    {
785
        $groupLocationParts = explode('/', $groupPath);
786
        $groupLocation = $this->locationService->loadLocation(array_pop($groupLocationParts));
787
        $userGroup = $this->userService->loadUserGroup($groupLocation->contentId);
788
789
        $roleAssignments = $this->roleService->getRoleAssignmentsForUserGroup($userGroup);
790
791
        return new Values\RoleAssignmentList($roleAssignments, $groupPath, true);
792
    }
793
794
    /**
795
     * Returns a role assignment to the given user.
796
     *
797
     * @param $userId
798
     * @param $roleId
799
     *
800
     * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException
801
     *
802
     * @return \eZ\Publish\Core\REST\Server\Values\RestUserRoleAssignment
803
     */
804
    public function loadRoleAssignmentForUser($userId, $roleId, Request $request)
805
    {
806
        $user = $this->userService->loadUser($userId);
807
        $roleAssignments = $this->roleService->getRoleAssignmentsForUser($user);
808
809
        foreach ($roleAssignments as $roleAssignment) {
810
            if ($roleAssignment->getRole()->id == $roleId) {
811
                return new Values\RestUserRoleAssignment($roleAssignment, $userId);
0 ignored issues
show
Bug introduced by
It seems like $roleAssignment defined by $roleAssignment on line 809 can also be of type object<eZ\Publish\API\Re...serGroupRoleAssignment>; however, eZ\Publish\Core\REST\Ser...signment::__construct() does only seem to accept object<eZ\Publish\API\Re...ser\UserRoleAssignment>, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
812
            }
813
        }
814
815
        throw new Exceptions\NotFoundException("Role assignment not found: '{$request->getPathInfo()}'.");
816
    }
817
818
    /**
819
     * Returns a role assignment to the given user group.
820
     *
821
     * @param $groupPath
822
     * @param $roleId
823
     *
824
     * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException
825
     *
826
     * @return \eZ\Publish\Core\REST\Server\Values\RestUserGroupRoleAssignment
827
     */
828
    public function loadRoleAssignmentForUserGroup($groupPath, $roleId, Request $request)
829
    {
830
        $groupLocationParts = explode('/', $groupPath);
831
        $groupLocation = $this->locationService->loadLocation(array_pop($groupLocationParts));
832
        $userGroup = $this->userService->loadUserGroup($groupLocation->contentId);
833
834
        $roleAssignments = $this->roleService->getRoleAssignmentsForUserGroup($userGroup);
835
        foreach ($roleAssignments as $roleAssignment) {
836
            if ($roleAssignment->getRole()->id == $roleId) {
837
                return new Values\RestUserGroupRoleAssignment($roleAssignment, $groupPath);
838
            }
839
        }
840
841
        throw new Exceptions\NotFoundException("Role assignment not found: '{$request->getPathInfo()}'.");
842
    }
843
844
    /**
845
     * Search all policies which are applied to a given user.
846
     *
847
     * @return \eZ\Publish\Core\REST\Server\Values\PolicyList
848
     */
849
    public function listPoliciesForUser(Request $request)
850
    {
851
        return new Values\PolicyList(
852
            $this->roleService->loadPoliciesByUserId(
0 ignored issues
show
Deprecated Code introduced by
The method eZ\Publish\API\Repositor...:loadPoliciesByUserId() has been deprecated with message: Since 6.8, not currently in use as permission system needs to know about role assignment limitations.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
853
                $request->query->get('userId')
854
            ),
855
            $request->getPathInfo()
856
        );
857
    }
858
859
    /**
860
     * Maps a RoleCreateStruct to a RoleUpdateStruct.
861
     *
862
     * Needed since both structs are encoded into the same media type on input.
863
     *
864
     * @param \eZ\Publish\API\Repository\Values\User\RoleCreateStruct $createStruct
865
     *
866
     * @return \eZ\Publish\API\Repository\Values\User\RoleUpdateStruct
867
     */
868
    protected function mapToUpdateStruct(RoleCreateStruct $createStruct)
869
    {
870
        return new RoleUpdateStruct(
871
            [
872
                'identifier' => $createStruct->identifier,
873
            ]
874
        );
875
    }
876
}
877