Completed
Push — master ( b0e9fb...0c2496 )
by Tarmo
35s queued 13s
created

UserRolesController   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 70
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 11
dl 0
loc 70
ccs 4
cts 4
cp 1
rs 10
c 0
b 0
f 0
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A __invoke() 0 15 1
1
<?php
2
declare(strict_types = 1);
3
/**
4
 * /src/Controller/v1/User/UserRolesController.php
5
 *
6
 * @author TLe, Tarmo Leppänen <[email protected]>
7
 */
8
9
namespace App\Controller\v1\User;
10
11
use App\Entity\User;
12
use App\Resource\UserResource;
13
use App\Security\RolesService;
14
use OpenApi\Annotations as OA;
15
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
16
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
17
use Symfony\Component\HttpFoundation\JsonResponse;
18
use Symfony\Component\HttpFoundation\Request;
19
use Symfony\Component\Routing\Annotation\Route;
20
21
/**
22
 * Class UserRolesController
23
 *
24
 * @package App\Controller\v1\User
25
 * @author TLe, Tarmo Leppänen <[email protected]>
26
 */
27
class UserRolesController
28
{
29 18
    public function __construct(
30
        private RolesService $rolesService,
31
    ) {
32 18
    }
33
34
    /**
35
     * Endpoint action to fetch specified user roles.
36
     *
37
     * @OA\Tag(name="User Management")
38
     * @OA\Parameter(
39
     *      name="Authorization",
40
     *      in="header",
41
     *      required=true,
42
     *      description="Authorization header",
43
     *      @OA\Schema(
44
     *          type="string",
45
     *          default="Bearer _your_jwt_here_",
46
     *      ),
47
     *  )
48
     * @OA\Response(
49
     *      response=200,
50
     *      description="Specified user roles",
51
     *      @OA\Schema(
52
     *          type="array",
53
     *          @OA\Items(type="string"),
54
     *      ),
55
     *  )
56
     * @OA\Response(
57
     *      response=401,
58
     *      description="Unauthorized",
59
     *      @OA\Schema(
60
     *          type="object",
61
     *          example={
62
     *              "Token not found": "{code: 401, message: 'JWT Token not found'}",
63
     *              "Expired token": "{code: 401, message: 'Expired JWT Token'}",
64
     *          },
65
     *          @OA\Property(property="code", type="integer", description="Error code"),
66
     *          @OA\Property(property="message", type="string", description="Error description"),
67
     *      ),
68
     *  )
69
     * @OA\Response(
70
     *      response=403,
71
     *      description="Access denied",
72
     *      @OA\Schema(
73
     *          type="object",
74
     *          example={
75
     *              "Access denied": "{code: 403, message: 'Access denied'}",
76
     *          },
77
     *          @OA\Property(property="code", type="integer", description="Error code"),
78
     *          @OA\Property(property="message", type="string", description="Error description"),
79
     *      ),
80
     *  )
81
     */
82 12
    #[Route(
83
        path: '/v1/user/{requestUser}/roles',
84
        requirements: [
85
            'requestUser' => '%app.uuid_v1_regex%',
86
        ],
87
        methods: [Request::METHOD_GET],
88
    )]
89
    #[Security('is_granted("IS_USER_HIMSELF", requestUser) or is_granted("ROLE_ROOT")')]
90
    #[ParamConverter(
91
        data: 'requestUser',
92
        class: UserResource::class,
93
    )]
94
    public function __invoke(User $requestUser): JsonResponse
95
    {
96 12
        return new JsonResponse($this->rolesService->getInheritedRoles($requestUser->getRoles()));
97
    }
98
}
99