Skip to content
Snippets Groups Projects
Commit a4280073 authored by Matt Glaman's avatar Matt Glaman Committed by Matt Glaman
Browse files

Issue #3126675 by mglaman: authenticated-as link breaks if user resource type name has been changed

parent 1a04270c
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@ use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\jsonapi\JsonApiResource\JsonApiDocumentTopLevel;
use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface;
use Drupal\jsonapi_hypermedia\AccessRestrictedLink;
use Drupal\jsonapi_hypermedia\Plugin\LinkProviderBase;
use Drupal\user\UserInterface;
......@@ -41,6 +42,13 @@ final class AuthenticatedAsLinkProvider extends LinkProviderBase implements Cont
*/
private $userStorage;
/**
* The resource type repository.
*
* @var \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface
*/
private $resourceTypeRepository;
/**
* {@inheritdoc}
*/
......@@ -50,6 +58,7 @@ final class AuthenticatedAsLinkProvider extends LinkProviderBase implements Cont
$provider->setUserStorage(
$container->get('entity_type.manager')->getStorage('user')
);
$provider->setResourceTypeRepository($container->get('jsonapi.resource_type.repository'));
return $provider;
}
......@@ -73,6 +82,16 @@ final class AuthenticatedAsLinkProvider extends LinkProviderBase implements Cont
$this->userStorage = $storage;
}
/**
* Set the resource type repository.
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository
* The resource type repository.
*/
public function setResourceTypeRepository(ResourceTypeRepositoryInterface $resource_type_repository) {
$this->resourceTypeRepository = $resource_type_repository;
}
/**
* {@inheritdoc}
*/
......@@ -89,10 +108,12 @@ final class AuthenticatedAsLinkProvider extends LinkProviderBase implements Cont
return AccessRestrictedLink::createInaccessibleLink($link_cacheability);
}
$resource_type = $this->resourceTypeRepository->get($user->getEntityTypeId(), $user->bundle());
$resource_type_name = $resource_type->getTypeName();
return AccessRestrictedLink::createLink(
AccessResult::allowedIf($user->isAuthenticated())->cachePerUser(),
$link_cacheability,
Url::fromRoute('jsonapi.user--user.individual', ['entity' => $user->uuid()]),
Url::fromRoute("jsonapi.$resource_type_name.individual", ['entity' => $user->uuid()]),
$this->getLinkRelationType()
);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment