Verified Commit 495174e5 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3114365 by mohit_aghera, david.muffley, danflanagan8, Greg__, wsantell,...

Issue #3114365 by mohit_aghera, david.muffley, danflanagan8, Greg__, wsantell, Lendude, larowlan, xjm: Vocabulary name not shown in View for Anonymous Users

(cherry picked from commit 8d5b54ef)
parent 7686fb5a
Loading
Loading
Loading
Loading
Loading
+1 −1
Changes for core/modules/jsonapi/tests/src/Functional/TermTest.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ class TermTest extends ResourceTestBase {
  protected function setUpAuthorization($method) {
    switch ($method) {
      case 'GET':
        $this->grantPermissionsToTestedRole(['access content']);
        $this->grantPermissionsToTestedRole(['access content', 'view vocabulary labels']);
        break;

      case 'POST':
+12 −0
Changes for core/modules/taxonomy/src/VocabularyAccessControlHandler.php: 12 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -14,11 +14,23 @@
 */
class VocabularyAccessControlHandler extends EntityAccessControlHandler {

  /**
   * {@inheritdoc}
   */
  protected $viewLabelOperation = TRUE;

  /**
   * {@inheritdoc}
   */
  protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
    switch ($operation) {
      case 'view label':
        return AccessResult::allowedIfHasPermissions($account, [
          'view vocabulary labels',
          'access taxonomy overview',
          'administer taxonomy',
        ], 'OR');

      case 'access taxonomy overview':
      case 'view':
        return AccessResult::allowedIfHasPermissions($account, ['access taxonomy overview', 'administer taxonomy'], 'OR');
+3 −0
Changes for core/modules/taxonomy/taxonomy.permissions.yml: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -14,5 +14,8 @@ delete all taxonomy revisions:
view all taxonomy revisions:
  title: 'View all term revisions'

view vocabulary labels:
  title: 'View vocabulary labels'

permission_callbacks:
  - Drupal\taxonomy\TaxonomyPermissions::permissions
+30 −0
Changes for core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyFieldVidTest.php: 30 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@

use Drupal\Core\Render\RenderContext;
use Drupal\Tests\taxonomy\Traits\TaxonomyTestTrait;
use Drupal\Tests\user\Traits\UserCreationTrait;
use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
use Drupal\user\Entity\User;
use Drupal\views\Tests\ViewTestData;
@@ -18,6 +19,7 @@
class TaxonomyFieldVidTest extends ViewsKernelTestBase {

  use TaxonomyTestTrait;
  use UserCreationTrait;

  /**
   * Modules to enable.
@@ -116,6 +118,34 @@ public function testViewsHandlerVidField() {

    $this->assertEquals($expected, $actual, 'Displayed vocabulary name should match that loaded from the term.');
    $this->assertEquals('bbb', $vocabulary->id(), 'First result should be vocabulary "bbb", due to DESC sorting.');

    // Test with user without 'view vocabulary labels' permission.
    $this->setUpCurrentUser();
    $actual = $renderer->executeInRenderContext(new RenderContext(), function () use ($view) {
      return $view->field['vid']->advancedRender($view->result[0]);
    });
    $expected = '';
    $this->assertEquals($expected, $actual);

    // Test with user with 'view vocabulary labels' permissions.
    $this->setUpCurrentUser([], ['view vocabulary labels']);
    $actual = $renderer->executeInRenderContext(new RenderContext(), function () use ($view) {
      return $view->field['vid']->advancedRender($view->result[0]);
    });
    $expected = $vocabulary->label();
    $this->assertEquals($expected, $actual);

    // Test with user with 'administer taxonomy' and 'access taxonomy overview'
    // permissions. Label should be displayed for either permission.
    $this->setUpCurrentUser([], [
      'administer taxonomy',
      'access taxonomy overview',
    ]);
    $actual = $renderer->executeInRenderContext(new RenderContext(), function () use ($view) {
      return $view->field['vid']->advancedRender($view->result[0]);
    });
    $expected = $vocabulary->label();
    $this->assertEquals($expected, $actual);
  }

}