installEntitySchema('user'); $this->installSchema('system', ['key_value_expire', 'sequences']); $this->installEntitySchema('node'); $this->installEntitySchema('taxonomy_term'); $this->installConfig(['permissions_by_term']); $this->installSchema('node', 'node_access'); $this->installSchema('permissions_by_term', 'permissions_by_term_user'); $this->installSchema('permissions_by_term', 'permissions_by_term_role'); $this->accessStorage = $this->container->get('permissions_by_term.access_storage'); $this->accessCheck = $this->container->get('permissions_by_term.access_check'); \Drupal::configFactory()->getEditable('taxonomy.settings')->set('maintain_index_table', TRUE)->save(); $this->createTestVocabulary(); $this->createPageNodeType(); $this->createCurrentUser(); } protected function createTestVocabulary() { Vocabulary::create([ 'name' => 'test', 'vid' => 'test', ])->save(); } protected function createPageNodeType() { NodeType::create([ 'type' => 'page', ])->save(); FieldStorageConfig::create([ 'entity_type' => 'node', 'field_name' => 'field_tags', 'type' => 'entity_reference', 'settings' => [ 'target_type' => 'taxonomy_term', ], 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, ])->save(); FieldConfig::create([ 'field_name' => 'field_tags', 'entity_type' => 'node', 'bundle' => 'page', ])->save(); } protected function createCurrentUser() { $testUser = User::create([ 'uid' => 2, 'name' => 'foobar', 'mail' => 'foobar@example.com', ]); $testUser->save(); \Drupal::service('current_user')->setAccount($testUser); } /** * @return int */ protected function createRelationOneGrantedTerm() { $term = Term::create([ 'name' => 'term1', 'vid' => 'test', ]); $term->save(); $tids[] = $term->id(); $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id()); $term = Term::create([ 'name' => 'term2', 'vid' => 'test', ]); $term->save(); $tids[] = $term->id(); $this->accessStorage->addTermPermissionsByUserIds([99], $term->id()); $node = Node::create([ 'type' => 'page', 'title' => 'test_title', 'field_tags' => [ [ 'target_id' => $tids[0] ], [ 'target_id' => $tids[1] ], ] ]); $node->save(); $this->setNidOneGrantedTerm($node->id()); } /** * @return int */ protected function createRelationNoGrantedTerm() { $term = Term::create([ 'name' => 'term2', 'vid' => 'test', ]); $term->save(); $tids[] = $term->id(); $this->accessStorage->addTermPermissionsByUserIds([1], $term->id()); $node = Node::create([ 'type' => 'page', 'title' => 'test_title', 'field_tags' => [ [ 'target_id' => $tids[0] ], ] ]); $node->save(); $this->setNidNoGrantedTerm($node->id()); } protected function createRelationAllGrantedTerms() { $term = Term::create([ 'name' => 'term1', 'vid' => 'test', ]); $term->save(); $tids[] = $term->id(); $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id()); $term = Term::create([ 'name' => 'term2', 'vid' => 'test', ]); $term->save(); $tids[] = $term->id(); $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id()); $node = Node::create([ 'type' => 'page', 'title' => 'test_title', 'field_tags' => [ [ 'target_id' => $tids[0] ], [ 'target_id' => $tids[1] ], ] ]); $node->save(); $this->setNidAllGrantedTerms($node->id()); } protected function createRelationNoTerms() { $term = Term::create([ 'name' => 'term1', 'vid' => 'test', ]); $term->save(); $tids[] = $term->id(); $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id()); $term = Term::create([ 'name' => 'term2', 'vid' => 'test', ]); $term->save(); $tids[] = $term->id(); $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id()); $node = Node::create([ 'type' => 'page', 'title' => 'test_title', 'field_tags' => [ [ 'target_id' => $tids[0] ], [ 'target_id' => $tids[1] ], ] ]); $node->save(); $this->setNidNoTerms($node->id()); } protected function getTaxonomyIndex() { return \Drupal::database()->select('taxonomy_index', 'ti') ->fields('ti', ['tid']) ->execute() ->fetchCol(); } /** * @return int */ protected function getNidOneGrantedTerm() { return $this->nidOneGrantedTerm; } /** * @param int $nidOneGrantedTerm */ protected function setNidOneGrantedTerm($nidOneGrantedTerm) { $this->nidOneGrantedTerm = $nidOneGrantedTerm; } /** * @return int */ protected function getNidAllGrantedTerms() { return $this->nidAllGrantedTerms; } /** * @param int $nidAllGrantedTerms */ protected function setNidAllGrantedTerms($nidAllGrantedTerms) { $this->nidAllGrantedTerms = $nidAllGrantedTerms; } /** * @return int */ protected function getNidNoGrantedTerm() { return $this->nidNoGrantedTerm; } /** * @param int $nidNoGrantedTerm */ protected function setNidNoGrantedTerm($nidNoGrantedTerm) { $this->nidNoGrantedTerm = $nidNoGrantedTerm; } /** * @return int */ protected function getNidNoTerms() { return $this->nidNoTerms; } /** * @param int $nidNoTerms */ protected function setNidNoTerms($nidNoTerms) { $this->nidNoTerms = $nidNoTerms; } }