Mercurial > hg > isophonics-drupal-site
comparison core/modules/media/src/MediaAccessControlHandler.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\media; | |
4 | |
5 use Drupal\Core\Access\AccessResult; | |
6 use Drupal\Core\Entity\EntityAccessControlHandler; | |
7 use Drupal\Core\Entity\EntityInterface; | |
8 use Drupal\Core\Session\AccountInterface; | |
9 | |
10 /** | |
11 * Defines an access control handler for the media entity. | |
12 */ | |
13 class MediaAccessControlHandler extends EntityAccessControlHandler { | |
14 | |
15 /** | |
16 * {@inheritdoc} | |
17 */ | |
18 protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { | |
19 if ($account->hasPermission('administer media')) { | |
20 return AccessResult::allowed()->cachePerPermissions(); | |
21 } | |
22 | |
23 $is_owner = ($account->id() && $account->id() === $entity->getOwnerId()); | |
24 switch ($operation) { | |
25 case 'view': | |
26 $access_result = AccessResult::allowedIf($account->hasPermission('view media') && $entity->isPublished()) | |
27 ->cachePerPermissions() | |
28 ->addCacheableDependency($entity); | |
29 if (!$access_result->isAllowed()) { | |
30 $access_result->setReason("The 'view media' permission is required and the media item must be published."); | |
31 } | |
32 return $access_result; | |
33 | |
34 case 'update': | |
35 if ($account->hasPermission('update any media')) { | |
36 return AccessResult::allowed()->cachePerPermissions(); | |
37 } | |
38 return AccessResult::allowedIf($account->hasPermission('update media') && $is_owner) | |
39 ->cachePerPermissions() | |
40 ->cachePerUser() | |
41 ->addCacheableDependency($entity); | |
42 | |
43 case 'delete': | |
44 if ($account->hasPermission('delete any media')) { | |
45 return AccessResult::allowed()->cachePerPermissions(); | |
46 } | |
47 return AccessResult::allowedIf($account->hasPermission('delete media') && $is_owner) | |
48 ->cachePerPermissions() | |
49 ->cachePerUser() | |
50 ->addCacheableDependency($entity); | |
51 | |
52 default: | |
53 return AccessResult::neutral()->cachePerPermissions(); | |
54 } | |
55 } | |
56 | |
57 /** | |
58 * {@inheritdoc} | |
59 */ | |
60 protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { | |
61 return AccessResult::allowedIfHasPermissions($account, ['administer media', 'create media'], 'OR'); | |
62 } | |
63 | |
64 } |