NodeGrantsHelper.php

Same filename and directory in other branches
  1. 11.x core/modules/node/src/NodeGrantsHelper.php

Namespace

Drupal\node

File

core/modules/node/src/NodeGrantsHelper.php

View source
<?php

declare (strict_types=1);
namespace Drupal\node;

use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Session\AccountInterface;

/**
 * Defines some helpers for the node access control system relating to grants.
 *
 * @ingroup node_access
 */
class NodeGrantsHelper {
  public function __construct(protected readonly ModuleHandlerInterface $moduleHandler) {
  }
  
  /**
   * Fetches an array of permission IDs granted to the given user ID.
   *
   * The implementation here provides only the universal "all" grant. A node
   * access module should implement hook_node_grants() to provide a grant list
   * for the user.
   *
   * After the default grants have been loaded, we allow modules to alter the
   * grants array by reference. This hook allows for complex business logic to
   * be applied when integrating multiple node access modules.
   *
   * @param string $operation
   *   The operation that the user is trying to perform.
   * @param \Drupal\Core\Session\AccountInterface $account
   *   The account object for the user performing the operation.
   *
   * @return array
   *   An associative array in which the keys are realms, and the values are
   *   arrays of grants for those realms.
   */
  public function nodeAccessGrants(string $operation, AccountInterface $account) : array {
    // Fetch node access grants from other modules.
    $grants = $this->moduleHandler
      ->invokeAll('node_grants', [
      $account,
      $operation,
    ]);
    // Allow modules to alter the assigned grants.
    $this->moduleHandler
      ->alter('node_grants', $grants, $account, $operation);
    return array_merge([
      'all' => [
        0,
      ],
    ], $grants);
  }

}

Classes

Title Deprecated Summary
NodeGrantsHelper Defines some helpers for the node access control system relating to grants.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.