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