Security update for permissions_by_term
[yaffs-website] / web / modules / contrib / permissions_by_term / tests / src / Kernel / PBTKernelTestBase.php
1 <?php
2
3 namespace Drupal\Tests\permissions_by_term\Kernel;
4
5 use Drupal\Core\Field\FieldStorageDefinitionInterface;
6 use Drupal\field\Entity\FieldConfig;
7 use Drupal\field\Entity\FieldStorageConfig;
8 use Drupal\KernelTests\KernelTestBase;
9 use Drupal\node\Entity\Node;
10 use Drupal\node\Entity\NodeType;
11 use Drupal\taxonomy\Entity\Vocabulary;
12 use Drupal\user\Entity\User;
13 use Drupal\permissions_by_term\Service\AccessCheck;
14 use Drupal\taxonomy\Entity\Term;
15 use Drupal\permissions_by_term\Service\AccessStorage;
16
17 /**
18  * Class PBTKernelTestBase
19  *
20  * @package Drupal\Tests\permissions_by_term\Kernel
21  */
22 abstract class PBTKernelTestBase extends KernelTestBase {
23
24   /**
25    * @var int
26    */
27   protected $nidOneGrantedTerm;
28
29   /**
30    * @var int
31    */
32   protected $nidNoGrantedTerm;
33
34   /**
35    * @var int
36    */
37   protected $nidAllGrantedTerms;
38
39   /**
40    * @var int
41    */
42   protected $nidNoTerms;
43
44   /**
45    * {@inheritdoc}
46    */
47   public static $modules = ['taxonomy', 'node', 'user', 'text', 'field', 'system', 'permissions_by_term'];
48
49   /**
50    * @var AccessStorage
51    */
52   protected $accessStorage;
53
54   /**
55    * @var AccessCheck
56    */
57   protected $accessCheck;
58
59   /**
60    * {@inheritdoc}
61    */
62   protected function setUp() {
63     parent::setUp();
64
65     $this->installEntitySchema('user');
66     $this->installSchema('system', ['key_value_expire', 'sequences']);
67     $this->installEntitySchema('node');
68     $this->installEntitySchema('taxonomy_term');
69     $this->installConfig(['permissions_by_term']);
70     $this->installSchema('node', 'node_access');
71     $this->installSchema('permissions_by_term', 'permissions_by_term_user');
72     $this->installSchema('permissions_by_term', 'permissions_by_term_role');
73     $this->accessStorage = $this->container->get('permissions_by_term.access_storage');
74     $this->accessCheck = $this->container->get('permissions_by_term.access_check');
75     \Drupal::configFactory()->getEditable('taxonomy.settings')->set('maintain_index_table', TRUE)->save();
76     $this->createTestVocabulary();
77     $this->createPageNodeType();
78     $this->createCurrentUser();
79   }
80
81   protected function createTestVocabulary() {
82     Vocabulary::create([
83       'name' => 'test',
84       'vid' => 'test',
85     ])->save();
86   }
87
88   protected function createPageNodeType() {
89     NodeType::create([
90       'type' => 'page',
91     ])->save();
92     FieldStorageConfig::create([
93       'entity_type' => 'node',
94       'field_name' => 'field_tags',
95       'type' => 'entity_reference',
96       'settings' => [
97         'target_type' => 'taxonomy_term',
98       ],
99       'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
100     ])->save();
101
102     FieldConfig::create([
103       'field_name' => 'field_tags',
104       'entity_type' => 'node',
105       'bundle' => 'page',
106     ])->save();
107   }
108
109   protected function createCurrentUser() {
110     $testUser = User::create([
111       'uid' => 2,
112       'name' => 'foobar',
113       'mail' => 'foobar@example.com',
114     ]);
115
116     $testUser->save();
117     \Drupal::service('current_user')->setAccount($testUser);
118   }
119
120   /**
121    * @return int
122    */
123   protected function createRelationOneGrantedTerm() {
124     $term = Term::create([
125       'name' => 'term1',
126       'vid' => 'test',
127     ]);
128     $term->save();
129     $tids[] = $term->id();
130
131     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id());
132
133     $term = Term::create([
134       'name' => 'term2',
135       'vid' => 'test',
136     ]);
137     $term->save();
138     $tids[] = $term->id();
139
140     $this->accessStorage->addTermPermissionsByUserIds([99], $term->id());
141
142     $node = Node::create([
143       'type' => 'page',
144       'title' => 'test_title',
145       'field_tags' => [
146         [
147           'target_id' => $tids[0]
148         ],
149         [
150           'target_id' => $tids[1]
151         ],
152       ]
153     ]);
154     $node->save();
155     $this->setNidOneGrantedTerm($node->id());
156   }
157
158   /**
159    * @return int
160    */
161   protected function createRelationNoGrantedTerm() {
162     $term = Term::create([
163       'name' => 'term2',
164       'vid' => 'test',
165     ]);
166     $term->save();
167     $tids[] = $term->id();
168
169     $this->accessStorage->addTermPermissionsByUserIds([1], $term->id());
170
171     $node = Node::create([
172       'type' => 'page',
173       'title' => 'test_title',
174       'field_tags' => [
175         [
176           'target_id' => $tids[0]
177         ],
178       ]
179     ]);
180     $node->save();
181     $this->setNidNoGrantedTerm($node->id());
182   }
183
184   protected function createRelationAllGrantedTerms() {
185     $term = Term::create([
186       'name' => 'term1',
187       'vid' => 'test',
188     ]);
189     $term->save();
190     $tids[] = $term->id();
191
192     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id());
193
194     $term = Term::create([
195       'name' => 'term2',
196       'vid' => 'test',
197     ]);
198     $term->save();
199     $tids[] = $term->id();
200
201     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id());
202
203     $node = Node::create([
204       'type' => 'page',
205       'title' => 'test_title',
206       'field_tags' => [
207         [
208           'target_id' => $tids[0]
209         ],
210         [
211           'target_id' => $tids[1]
212         ],
213       ]
214     ]);
215     $node->save();
216     $this->setNidAllGrantedTerms($node->id());
217   }
218
219   protected function createRelationNoTerms() {
220     $term = Term::create([
221       'name' => 'term1',
222       'vid' => 'test',
223     ]);
224     $term->save();
225     $tids[] = $term->id();
226
227     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id());
228
229     $term = Term::create([
230       'name' => 'term2',
231       'vid' => 'test',
232     ]);
233     $term->save();
234     $tids[] = $term->id();
235
236     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id());
237
238     $node = Node::create([
239       'type' => 'page',
240       'title' => 'test_title',
241       'field_tags' => [
242         [
243           'target_id' => $tids[0]
244         ],
245         [
246           'target_id' => $tids[1]
247         ],
248       ]
249     ]);
250     $node->save();
251     $this->setNidNoTerms($node->id());
252   }
253
254
255   protected function getTaxonomyIndex() {
256     return \Drupal::database()->select('taxonomy_index', 'ti')
257       ->fields('ti', ['tid'])
258       ->execute()
259       ->fetchCol();
260   }
261
262   /**
263    * @return int
264    */
265   protected function getNidOneGrantedTerm() {
266     return $this->nidOneGrantedTerm;
267   }
268
269   /**
270    * @param int $nidOneGrantedTerm
271    */
272   protected function setNidOneGrantedTerm($nidOneGrantedTerm) {
273     $this->nidOneGrantedTerm = $nidOneGrantedTerm;
274   }
275
276   /**
277    * @return int
278    */
279   protected function getNidAllGrantedTerms() {
280     return $this->nidAllGrantedTerms;
281   }
282
283   /**
284    * @param int $nidAllGrantedTerms
285    */
286   protected function setNidAllGrantedTerms($nidAllGrantedTerms) {
287     $this->nidAllGrantedTerms = $nidAllGrantedTerms;
288   }
289
290   /**
291    * @return int
292    */
293   protected function getNidNoGrantedTerm() {
294     return $this->nidNoGrantedTerm;
295   }
296
297   /**
298    * @param int $nidNoGrantedTerm
299    */
300   protected function setNidNoGrantedTerm($nidNoGrantedTerm) {
301     $this->nidNoGrantedTerm = $nidNoGrantedTerm;
302   }
303
304   /**
305    * @return int
306    */
307   protected function getNidNoTerms() {
308     return $this->nidNoTerms;
309   }
310
311   /**
312    * @param int $nidNoTerms
313    */
314   protected function setNidNoTerms($nidNoTerms) {
315     $this->nidNoTerms = $nidNoTerms;
316   }
317
318 }