diff --git a/core/modules/node/src/Tests/NodeAccessBaseTableTest.php b/core/modules/node/src/Tests/NodeAccessBaseTableTest.php index f227792dee2927847ae67ae9ff9517e83abfadee..a590f28a4dd74574f83686f8ec491d735e000564 100644 --- a/core/modules/node/src/Tests/NodeAccessBaseTableTest.php +++ b/core/modules/node/src/Tests/NodeAccessBaseTableTest.php @@ -125,7 +125,7 @@ function testNodeAccessBasic() { $this->assertTaxonomyPage(FALSE); } - // Now test that a user with 'access any private content' can view content. + // Now test that a user with 'node test view' permissions can view content. $access_user = $this->drupalCreateUser(array('access content', 'create article content', 'node test view', 'search content')); $this->drupalLogin($access_user); diff --git a/core/modules/node/tests/modules/node_access_test/node_access_test.module b/core/modules/node/tests/modules/node_access_test/node_access_test.module index 0d9494eb943aaae82576931c58ee0635c2bef222..13c2ec837270be21d3357598b8f396857ec88456 100644 --- a/core/modules/node/tests/modules/node_access_test/node_access_test.module +++ b/core/modules/node/tests/modules/node_access_test/node_access_test.module @@ -2,11 +2,21 @@ /** * @file - * A dummy module implementing node access related hooks for testing purposes. + * Test module for testing the node access system. * - * A dummy module implementing node access related hooks to test API interaction - * with the Node module. This module restricts view permission to those with - * a special 'node test view' permission. + * This module's functionality depends on the following state variables: + * - node_access_test.no_access_uid: Used in NodeQueryAlterTest to enable the + * node_access_all grant realm. + * - node_access_test.private: When TRUE, the module controls access for nodes + * with a 'private' property set, and inherits the default core access for + * nodes without this flag. When FALSE, the module controls access for all + * nodes. + * - node_access_test_secret_catalan: When set to TRUE and using the Catalan + * 'ca' language code, makes all Catalan content secret. + * + * @see node_access_test_node_grants() + * @see \Drupal\node\Tests\NodeQueryAlterTest + * @see \Drupal\node\Tests\NodeAccessBaseTableTest */ use Drupal\Core\Entity\EntityTypeInterface; @@ -15,10 +25,29 @@ /** * Implements hook_node_grants(). + * + * Provides three grant realms: + * - node_access_test_author: Grants users view, update, and delete privileges + * on nodes they have authored. Users receive a group ID matching their user + * ID on this realm. + * - node_access_test: Grants users view privileges when they have the + * 'node test view' permission. Users with this permission receive two group + * IDs for the realm, 8888 and 8889. Access for both realms is identical; + * the second group is added so that the interaction of multiple groups on + * a given grant realm can be tested in NodeAccessPagerTest. + * - node_access_all: Provides grants for the user whose user ID matches the + * 'node_access_test.no_access_uid' state variable. Access control on this + * realm is not provided in this module; instead, + * NodeQueryAlterTest::testNodeQueryAlterOverride() manually writes a node + * access record defining the access control for this realm. + * + * @see \Drupal\node\Tests\NodeQueryAlterTest::testNodeQueryAlterOverride() + * @see \Drupal\node\Tests\NodeAccessPagerTest + * @see node_access_test_permission() + * @see node_access_test_node_access_records() */ function node_access_test_node_grants($account, $op) { $grants = array(); - // First grant a grant to the author for own content. $grants['node_access_test_author'] = array($account->id()); if ($op == 'view' && user_access('node test view', $account)) { $grants['node_access_test'] = array(8888, 8889); @@ -33,11 +62,23 @@ function node_access_test_node_grants($account, $op) { /** * Implements hook_node_access_records(). + * + * By default, records are written for all nodes. When the + * 'node_access_test.private' state variable is set to TRUE, records + * are only written for nodes with a "private" property set, which causes the + * Node module to write the default global view grant for nodes that are not + * marked private. + * + * @see \Drupal\node\Tests\NodeAccessBaseTableTest::setUp() + * @see node_access_test_node_grants() + * @see node_access_test_permission() */ function node_access_test_node_access_records(NodeInterface $node) { $grants = array(); // For NodeAccessBaseTableTestCase, only set records for private nodes. if (!\Drupal::state()->get('node_access_test.private') || $node->private->value) { + // Groups 8888 and 8889 for the node_access_test realm both receive a view + // grant for all controlled nodes. See node_access_test_node_grants(). $grants[] = array( 'realm' => 'node_access_test', 'gid' => 8888, @@ -54,7 +95,7 @@ function node_access_test_node_access_records(NodeInterface $node) { 'grant_delete' => 0, 'priority' => 0, ); - // For the author realm, the GID is equivalent to a UID, which + // For the author realm, the group ID is equivalent to a user ID, which // means there are many many groups of just 1 user. $grants[] = array( 'realm' => 'node_access_test_author', @@ -72,7 +113,14 @@ function node_access_test_node_access_records(NodeInterface $node) { /** * Implements hook_permission(). * - * Sets up permissions for this module. + * Provides a 'node test view' permission. By default, all content is + * restricted, and users without this permission can only view content they + * have authored. When the 'node_access_test.private' state variable is + * TRUE, only 'private' nodes are restricted, and this permission grants access + * to view private nodes. + * + * @see node_access_test_node_access_records() + * @see node_access_test_node_grants() */ function node_access_test_permission() { return array('node test view' => array('title' => 'View content')); @@ -120,7 +168,6 @@ function node_access_test_node_load($nodes) { /** * Implements hook_node_predelete(). */ - function node_access_test_node_predelete(NodeInterface $node) { db_delete('node_access_test')->condition('nid', $node->id())->execute(); } @@ -140,7 +187,7 @@ function node_access_test_node_update(NodeInterface $node) { } /** - * Helper for node insert/update. + * Saves the private status of the node in the database. */ function _node_access_test_node_write(NodeInterface $node) { db_merge('node_access_test')