Mercurial > hg > cmmr2012-drupal-site
comparison core/modules/media/tests/src/Kernel/MediaAccessControlHandlerTest.php @ 5:12f9dff5fda9 tip
Update to Drupal core 8.7.1
author | Chris Cannam |
---|---|
date | Thu, 09 May 2019 15:34:47 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
4:a9cd425dd02b | 5:12f9dff5fda9 |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\media\Kernel; | |
4 | |
5 use Drupal\Core\Access\AccessResult; | |
6 use Drupal\Core\Access\AccessResultInterface; | |
7 use Drupal\media\Entity\Media; | |
8 use Drupal\Tests\user\Traits\UserCreationTrait; | |
9 | |
10 /** | |
11 * Tests the media access control handler. | |
12 * | |
13 * @group media | |
14 * | |
15 * @coversDefaultClass \Drupal\media\MediaAccessControlHandler | |
16 */ | |
17 class MediaAccessControlHandlerTest extends MediaKernelTestBase { | |
18 | |
19 use UserCreationTrait; | |
20 | |
21 /** | |
22 * Tests the media access control handler. | |
23 * | |
24 * @param string[] $permissions | |
25 * The permissions that the user should be given. | |
26 * @param array $entity_values | |
27 * Initial values from which to create the media entity. | |
28 * @param string $operation | |
29 * The operation, one of 'view', 'update' or 'delete'. | |
30 * @param \Drupal\Core\Access\AccessResultInterface $expected_result | |
31 * Expected result. | |
32 * @param string[] $expected_cache_contexts | |
33 * Expected cache contexts. | |
34 * @param string[] $expected_cache_tags | |
35 * Expected cache tags. | |
36 * | |
37 * @covers ::checkAccess | |
38 * @dataProvider providerAccess | |
39 */ | |
40 public function testAccess(array $permissions, array $entity_values, $operation, AccessResultInterface $expected_result, array $expected_cache_contexts, array $expected_cache_tags) { | |
41 // Set a fixed ID so the type specific permissions match. | |
42 $media_type = $this->createMediaType('test', [ | |
43 'id' => 'test', | |
44 ]); | |
45 | |
46 $user = $this->createUser($permissions); | |
47 | |
48 $entity_values += [ | |
49 'status' => FALSE, | |
50 'uid' => $user->id(), | |
51 'bundle' => $media_type->id(), | |
52 ]; | |
53 | |
54 $entity = Media::create($entity_values); | |
55 $entity->save(); | |
56 /** @var \Drupal\Core\Entity\EntityAccessControlHandlerInterface $access_handler */ | |
57 $access_handler = $this->container->get('entity_type.manager')->getAccessControlHandler('media'); | |
58 $this->assertAccess($expected_result, $expected_cache_contexts, $expected_cache_tags, $access_handler->access($entity, $operation, $user, TRUE)); | |
59 } | |
60 | |
61 /** | |
62 * @param string[] $permissions | |
63 * User permissions. | |
64 * @param \Drupal\Core\Access\AccessResultInterface $expected_result | |
65 * Expected result. | |
66 * @param string[] $expected_cache_contexts | |
67 * Expected cache contexts. | |
68 * @param string[] $expected_cache_tags | |
69 * Expected cache tags. | |
70 * | |
71 * @covers ::checkCreateAccess | |
72 * @dataProvider providerCreateAccess | |
73 */ | |
74 public function testCreateAccess(array $permissions, AccessResultInterface $expected_result, array $expected_cache_contexts, array $expected_cache_tags) { | |
75 $user = $this->createUser($permissions); | |
76 | |
77 /** @var \Drupal\Core\Entity\EntityAccessControlHandlerInterface $access_handler */ | |
78 $access_handler = $this->container->get('entity_type.manager')->getAccessControlHandler('media'); | |
79 $this->assertAccess($expected_result, $expected_cache_contexts, $expected_cache_tags, $access_handler->createAccess('test', $user, [], TRUE)); | |
80 } | |
81 | |
82 /** | |
83 * Asserts an access result. | |
84 * | |
85 * @param \Drupal\Core\Access\AccessResultInterface $expected_access_result | |
86 * The expected access result. | |
87 * @param string[] $expected_cache_contexts | |
88 * Expected contexts. | |
89 * @param string[] $expected_cache_tags | |
90 * Expected cache tags | |
91 * @param \Drupal\Core\Access\AccessResultInterface $actual | |
92 * The actual access result. | |
93 */ | |
94 protected function assertAccess(AccessResultInterface $expected_access_result, array $expected_cache_contexts, array $expected_cache_tags, AccessResultInterface $actual) { | |
95 $this->assertSame($expected_access_result->isAllowed(), $actual->isAllowed()); | |
96 $this->assertSame($expected_access_result->isForbidden(), $actual->isForbidden()); | |
97 $this->assertSame($expected_access_result->isNeutral(), $actual->isNeutral()); | |
98 | |
99 $actual_cache_contexts = $actual->getCacheContexts(); | |
100 sort($expected_cache_contexts); | |
101 sort($actual_cache_contexts); | |
102 $this->assertSame($expected_cache_contexts, $actual_cache_contexts); | |
103 | |
104 $actual_cache_tags = $actual->getCacheTags(); | |
105 sort($expected_cache_tags); | |
106 sort($actual_cache_tags); | |
107 $this->assertSame($expected_cache_tags, $actual_cache_tags); | |
108 } | |
109 | |
110 /** | |
111 * Data provider for testAccess(). | |
112 * | |
113 * @return array | |
114 * The data sets to test. | |
115 */ | |
116 public function providerAccess() { | |
117 $test_data = []; | |
118 | |
119 // Check published / unpublished media access for a user owning the media | |
120 // item without permissions. | |
121 $test_data['owner, no permissions / published / view'] = [ | |
122 [], | |
123 ['status' => TRUE], | |
124 'view', | |
125 AccessResult::neutral(), | |
126 ['user.permissions'], | |
127 ['media:1'], | |
128 ]; | |
129 $test_data['owner, no permissions / published / update'] = [ | |
130 [], | |
131 ['status' => TRUE], | |
132 'update', | |
133 AccessResult::neutral(), | |
134 ['user.permissions'], | |
135 [], | |
136 ]; | |
137 $test_data['owner, no permissions / published / delete'] = [ | |
138 [], | |
139 ['status' => TRUE], | |
140 'delete', | |
141 AccessResult::neutral(), | |
142 ['user.permissions'], | |
143 [], | |
144 ]; | |
145 $test_data['owner, no permissions / unpublished / view'] = [ | |
146 [], | |
147 [], | |
148 'view', | |
149 AccessResult::neutral(), | |
150 ['user.permissions'], | |
151 ['media:1'], | |
152 ]; | |
153 $test_data['owner, no permissions / unpublished / update'] = [ | |
154 [], | |
155 [], | |
156 'update', | |
157 AccessResult::neutral(), | |
158 ['user.permissions'], | |
159 [], | |
160 ]; | |
161 $test_data['owner, no permissions / unpublished / delete'] = [ | |
162 [], | |
163 [], | |
164 'delete', | |
165 AccessResult::neutral(), | |
166 ['user.permissions'], | |
167 [], | |
168 ]; | |
169 | |
170 // Check published / unpublished media access for a user not owning the | |
171 // media item without permissions. | |
172 $test_data['not owner, no permissions / published / view'] = [ | |
173 [], | |
174 ['uid' => 0, 'status' => TRUE], | |
175 'view', | |
176 AccessResult::neutral(), | |
177 ['user.permissions'], | |
178 ['media:1'], | |
179 ]; | |
180 $test_data['not owner, no permissions / published / update'] = [ | |
181 [], | |
182 ['uid' => 0, 'status' => TRUE], | |
183 'update', | |
184 AccessResult::neutral(), | |
185 ['user.permissions'], | |
186 [], | |
187 ]; | |
188 $test_data['not owner, no permissions / published / delete'] = [ | |
189 [], | |
190 ['uid' => 0, 'status' => TRUE], | |
191 'delete', | |
192 AccessResult::neutral(), | |
193 ['user.permissions'], | |
194 [], | |
195 ]; | |
196 $test_data['not owner, no permissions / unpublished / view'] = [ | |
197 [], | |
198 ['uid' => 0], | |
199 'view', | |
200 AccessResult::neutral(), | |
201 ['user.permissions'], | |
202 ['media:1'], | |
203 ]; | |
204 $test_data['not owner, no permissions / unpublished / update'] = [ | |
205 [], | |
206 ['uid' => 0], | |
207 'update', | |
208 AccessResult::neutral(), | |
209 ['user.permissions'], | |
210 [], | |
211 ]; | |
212 $test_data['not owner, no permissions / unpublished / delete'] = [ | |
213 [], | |
214 ['uid' => 0], | |
215 'delete', | |
216 AccessResult::neutral(), | |
217 ['user.permissions'], | |
218 [], | |
219 ]; | |
220 | |
221 // Check published / unpublished media access for a user owning the media | |
222 // item with only the 'view media' permission. | |
223 $test_data['owner, can view media / published / view'] = [ | |
224 ['view media'], | |
225 ['status' => TRUE], | |
226 'view', | |
227 AccessResult::allowed(), | |
228 ['user.permissions'], | |
229 ['media:1'], | |
230 ]; | |
231 $test_data['owner, can view media / published / update'] = [ | |
232 ['view media'], | |
233 ['status' => TRUE], | |
234 'update', | |
235 AccessResult::neutral(), | |
236 ['user.permissions'], | |
237 [], | |
238 ]; | |
239 $test_data['owner, can view media / published / delete'] = [ | |
240 ['view media'], | |
241 ['status' => TRUE], | |
242 'delete', | |
243 AccessResult::neutral(), | |
244 ['user.permissions'], | |
245 [], | |
246 ]; | |
247 $test_data['owner, can view media / unpublished / view'] = [ | |
248 ['view media'], | |
249 [], | |
250 'view', | |
251 AccessResult::neutral(), | |
252 ['user.permissions'], | |
253 ['media:1'], | |
254 ]; | |
255 $test_data['owner, can view media / unpublished / update'] = [ | |
256 ['view media'], | |
257 [], | |
258 'update', | |
259 AccessResult::neutral(), | |
260 ['user.permissions'], | |
261 [], | |
262 ]; | |
263 $test_data['owner, can view media / unpublished / delete'] = [ | |
264 ['view media'], | |
265 [], | |
266 'delete', | |
267 AccessResult::neutral(), | |
268 ['user.permissions'], | |
269 [], | |
270 ]; | |
271 | |
272 // Check published / unpublished media access for a user not owning the | |
273 // media item with only the 'view media' permission. | |
274 $test_data['not owner, can view media / published / view'] = [ | |
275 ['view media'], | |
276 ['uid' => 0, 'status' => TRUE], | |
277 'view', | |
278 AccessResult::allowed(), | |
279 ['user.permissions'], | |
280 ['media:1'], | |
281 ]; | |
282 $test_data['not owner, can view media / published / update'] = [ | |
283 ['view media'], | |
284 ['uid' => 0, 'status' => TRUE], | |
285 'update', | |
286 AccessResult::neutral(), | |
287 ['user.permissions'], | |
288 [], | |
289 ]; | |
290 $test_data['not owner, can view media / published / delete'] = [ | |
291 ['view media'], | |
292 ['uid' => 0, 'status' => TRUE], | |
293 'delete', | |
294 AccessResult::neutral(), | |
295 ['user.permissions'], | |
296 [], | |
297 ]; | |
298 $test_data['not owner, can view media / unpublished / view'] = [ | |
299 ['view media'], | |
300 ['uid' => 0], | |
301 'view', | |
302 AccessResult::neutral(), | |
303 ['user.permissions'], | |
304 ['media:1'], | |
305 ]; | |
306 $test_data['not owner, can view media / unpublished / update'] = [ | |
307 ['view media'], | |
308 ['uid' => 0], | |
309 'update', | |
310 AccessResult::neutral(), | |
311 ['user.permissions'], | |
312 [], | |
313 ]; | |
314 $test_data['not owner, can view media / unpublished / delete'] = [ | |
315 ['view media'], | |
316 ['uid' => 0], | |
317 'delete', | |
318 AccessResult::neutral(), | |
319 ['user.permissions'], | |
320 [], | |
321 ]; | |
322 | |
323 // Check published / unpublished media access for a user owning the media | |
324 // item with the 'view media' and 'view own unpublished' permission. | |
325 $test_data['owner, can view own unpublished media / published / view'] = [ | |
326 ['view media', 'view own unpublished media'], | |
327 ['status' => TRUE], | |
328 'view', | |
329 AccessResult::allowed(), | |
330 ['user.permissions'], | |
331 ['media:1'], | |
332 ]; | |
333 $test_data['owner, can view own unpublished media / published / update'] = [ | |
334 ['view media', 'view own unpublished media'], | |
335 ['status' => TRUE], | |
336 'update', | |
337 AccessResult::neutral(), | |
338 ['user.permissions'], | |
339 [], | |
340 ]; | |
341 $test_data['owner, can view own unpublished media / published / delete'] = [ | |
342 ['view media', 'view own unpublished media'], | |
343 ['status' => TRUE], | |
344 'delete', | |
345 AccessResult::neutral(), | |
346 ['user.permissions'], | |
347 [], | |
348 ]; | |
349 $test_data['owner, can view own unpublished media / unpublished / view'] = [ | |
350 ['view media', 'view own unpublished media'], | |
351 [], | |
352 'view', | |
353 AccessResult::allowed(), | |
354 ['user.permissions', 'user'], | |
355 ['media:1'], | |
356 ]; | |
357 $test_data['owner, can view own unpublished media / unpublished / update'] = [ | |
358 ['view media', 'view own unpublished media'], | |
359 [], | |
360 'update', | |
361 AccessResult::neutral(), | |
362 ['user.permissions'], | |
363 [], | |
364 ]; | |
365 $test_data['owner, can view own unpublished media / unpublished / delete'] = [ | |
366 ['view media', 'view own unpublished media'], | |
367 [], | |
368 'delete', | |
369 AccessResult::neutral(), | |
370 ['user.permissions'], | |
371 [], | |
372 ]; | |
373 | |
374 // Check published / unpublished media access for a user not owning the | |
375 // media item with the 'view media' and 'view own unpublished' permission. | |
376 $test_data['not owner, can view own unpublished media / published / view'] = [ | |
377 ['view media', 'view own unpublished media'], | |
378 ['uid' => 0, 'status' => TRUE], | |
379 'view', | |
380 AccessResult::allowed(), | |
381 ['user.permissions'], | |
382 ['media:1'], | |
383 ]; | |
384 $test_data['not owner, can view own unpublished media / published / update'] = [ | |
385 ['view media', 'view own unpublished media'], | |
386 ['uid' => 0, 'status' => TRUE], | |
387 'update', | |
388 AccessResult::neutral(), | |
389 ['user.permissions'], | |
390 [], | |
391 ]; | |
392 $test_data['not owner, can view own unpublished media / published / delete'] = [ | |
393 ['view media', 'view own unpublished media'], | |
394 ['uid' => 0, 'status' => TRUE], | |
395 'delete', | |
396 AccessResult::neutral(), | |
397 ['user.permissions'], | |
398 [], | |
399 ]; | |
400 $test_data['not owner, can view own unpublished media / unpublished / view'] = [ | |
401 ['view media', 'view own unpublished media'], | |
402 ['uid' => 0], | |
403 'view', | |
404 AccessResult::neutral(), | |
405 ['user.permissions', 'user'], | |
406 ['media:1'], | |
407 ]; | |
408 $test_data['not owner, can view own unpublished media / unpublished / update'] = [ | |
409 ['view media', 'view own unpublished media'], | |
410 ['uid' => 0], | |
411 'update', | |
412 AccessResult::neutral(), | |
413 ['user.permissions'], | |
414 [], | |
415 ]; | |
416 $test_data['not owner, can view own unpublished media / unpublished / delete'] = [ | |
417 ['view media', 'view own unpublished media'], | |
418 ['uid' => 0], | |
419 'delete', | |
420 AccessResult::neutral(), | |
421 ['user.permissions'], | |
422 [], | |
423 ]; | |
424 | |
425 return $test_data; | |
426 } | |
427 | |
428 /** | |
429 * Data provider for testCreateAccess(). | |
430 * | |
431 * @return array | |
432 * The data sets to test. | |
433 */ | |
434 public function providerCreateAccess() { | |
435 $test_data = []; | |
436 | |
437 // Check create access for a user without permissions. | |
438 $test_data['user, no permissions / create'] = [ | |
439 [], | |
440 AccessResult::neutral()->setReason("The following permissions are required: 'administer media' OR 'create media'."), | |
441 ['user.permissions'], | |
442 [], | |
443 ]; | |
444 | |
445 // Check create access for a user with the 'view media' permission. | |
446 $test_data['user, can view media / create'] = [ | |
447 [ | |
448 'view media', | |
449 ], | |
450 AccessResult::neutral("The following permissions are required: 'administer media' OR 'create media'."), | |
451 ['user.permissions'], | |
452 [], | |
453 ]; | |
454 | |
455 // Check create access for a user with the 'view media' and 'view own | |
456 // unpublished media' permission. | |
457 $test_data['user, can view own unpublished media / create'] = [ | |
458 [ | |
459 'view media', | |
460 'view own unpublished media', | |
461 ], | |
462 AccessResult::neutral("The following permissions are required: 'administer media' OR 'create media'."), | |
463 ['user.permissions'], | |
464 [], | |
465 ]; | |
466 | |
467 // Check create access for a user with the 'view media', 'view own | |
468 // unpublished media', 'update any media' and 'delete any media' permission. | |
469 $test_data['user, can view own unpublished media and update or delete any media / create'] = [ | |
470 [ | |
471 'view media', | |
472 'view own unpublished media', | |
473 'update any media', | |
474 'delete any media', | |
475 ], | |
476 AccessResult::neutral("The following permissions are required: 'administer media' OR 'create media'."), | |
477 ['user.permissions'], | |
478 [], | |
479 ]; | |
480 | |
481 // Check create access for a user with the 'view media', 'view own | |
482 // unpublished media', 'update media' and 'delete media' permission. | |
483 $test_data['user, can view own unpublished media and update or delete own media / create'] = [ | |
484 [ | |
485 'view media', | |
486 'view own unpublished media', | |
487 'update media', | |
488 'delete media', | |
489 ], | |
490 AccessResult::neutral("The following permissions are required: 'administer media' OR 'create media'."), | |
491 ['user.permissions'], | |
492 [], | |
493 ]; | |
494 | |
495 // Check create access for a user with the 'view media', 'view own | |
496 // unpublished media', 'update any media', 'delete any media', 'update | |
497 // media' and 'delete media' permission. | |
498 $test_data['user, can view own unpublished media and update or delete all media / create'] = [ | |
499 [ | |
500 'view media', | |
501 'view own unpublished media', | |
502 'update any media', | |
503 'delete any media', | |
504 'update media', | |
505 'delete media', | |
506 ], | |
507 AccessResult::neutral("The following permissions are required: 'administer media' OR 'create media'."), | |
508 ['user.permissions'], | |
509 [], | |
510 ]; | |
511 | |
512 // Check create access for a user with all media permissions except 'create | |
513 // media' or 'administer media'. | |
514 $test_data['user, can not create or administer media / create'] = [ | |
515 [ | |
516 'access media overview', | |
517 'view media', | |
518 'view own unpublished media', | |
519 'update any media', | |
520 'delete any media', | |
521 'update media', | |
522 'delete media', | |
523 ], | |
524 AccessResult::neutral("The following permissions are required: 'administer media' OR 'create media'."), | |
525 ['user.permissions'], | |
526 [], | |
527 ]; | |
528 | |
529 // Check create access for a user with the 'create media' permission. | |
530 $test_data['user, can create media / create'] = [ | |
531 [ | |
532 'create media', | |
533 ], | |
534 AccessResult::allowed(), | |
535 ['user.permissions'], | |
536 [], | |
537 ]; | |
538 | |
539 // Check create access for a user with the 'administer media' permission. | |
540 $test_data['user, can administer media / create'] = [ | |
541 [ | |
542 'administer media', | |
543 ], | |
544 AccessResult::allowed(), | |
545 ['user.permissions'], | |
546 [], | |
547 ]; | |
548 | |
549 return $test_data; | |
550 } | |
551 | |
552 } |