From a4280073a66254524ff2e475eef706bf75c0459c Mon Sep 17 00:00:00 2001 From: mglaman <mglaman@2416470.no-reply.drupal.org> Date: Fri, 10 Apr 2020 10:12:00 -0500 Subject: [PATCH] Issue #3126675 by mglaman: authenticated-as link breaks if user resource type name has been changed --- .../AuthenticatedAsLinkProvider.php | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Plugin/jsonapi_hypermedia/LinkProvider/AuthenticatedAsLinkProvider.php b/src/Plugin/jsonapi_hypermedia/LinkProvider/AuthenticatedAsLinkProvider.php index c9430dc..419fdfd 100644 --- a/src/Plugin/jsonapi_hypermedia/LinkProvider/AuthenticatedAsLinkProvider.php +++ b/src/Plugin/jsonapi_hypermedia/LinkProvider/AuthenticatedAsLinkProvider.php @@ -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() ); } -- GitLab