*/ class UsersController extends AbstractAdminApiCrudController { protected string $entityClass = Entity\User::class; protected string $resourceRouteName = 'api:admin:user'; protected function viewRecord(object $record, ServerRequest $request): mixed { if (!($record instanceof Entity\User)) { throw new InvalidArgumentException(sprintf('Record must be an instance of %s.', $this->entityClass)); } $return = $this->toArray($record); $isInternal = ('true' === $request->getParam('internal', 'false')); $router = $request->getRouter(); $csrf = $request->getCsrf(); $currentUser = $request->getUser(); $return['is_me'] = $currentUser->getIdRequired() === $record->getIdRequired(); $return['links'] = [ 'self' => (string)$router->fromHere( route_name: $this->resourceRouteName, route_params: ['id' => $record->getIdRequired()], absolute: !$isInternal ), 'masquerade' => (string)$router->fromHere( route_name: 'account:masquerade', route_params: [ 'id' => $record->getIdRequired(), 'csrf' => $csrf->generate(MasqueradeAction::CSRF_NAMESPACE), ], absolute: !$isInternal ), ]; return $return; } public function editAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface { $record = $this->getRecord($id); if (null === $record) { return $response->withStatus(404) ->withJson(Entity\Api\Error::notFound()); } $currentUser = $request->getUser(); if ($record->getId() === $currentUser->getId()) { return $response->withStatus(403) ->withJson(new Entity\Api\Error(403, __('You cannot modify yourself.'))); } $this->editRecord((array)$request->getParsedBody(), $record); return $response->withJson(Entity\Api\Status::updated()); } public function deleteAction(ServerRequest $request, Response $response, mixed $id): ResponseInterface { $record = $this->getRecord($id); if (null === $record) { return $response->withStatus(404) ->withJson(Entity\Api\Error::notFound()); } $currentUser = $request->getUser(); if ($record->getId() === $currentUser->getId()) { return $response->withStatus(403) ->withJson(new Entity\Api\Error(403, __('You cannot remove yourself.'))); } $this->deleteRecord($record); return $response->withJson(Entity\Api\Status::deleted()); } }