Browse Source

added entity access check hook from DGI

main
Paul Pound 6 months ago
parent
commit
766e5c674f
  1. 32
      islandlives.module

32
islandlives.module

@ -40,3 +40,35 @@ function islandlives_views_pre_render(ViewExecutable $view) {
$view->element['#attached']['library'][] = 'islandlives/unpublished';
}
}
/**
* Implements hook_entity_access().
*/
function islandlives_entity_access(\Drupal\Core\Entity\EntityInterface $entity, $operation, \Drupal\Core\Session\AccountInterface $account) {
// Only modify access for 'view' and 'download' operations, and only for anonymous users.
if (!($operation === 'view' || $operation === 'download') || !$account->isAnonymous()) {
return \Drupal\Core\Access\AccessResult::neutral();
}
if ($entity instanceof \Drupal\media\MediaInterface) {
if (!$entity->isPublished()) {
return \Drupal\Core\Access\AccessResult::forbidden('Media is not published.');
}
}
elseif ($entity instanceof \Drupal\file\FileInterface) {
// Get all media attached to the files.
$media = \Drupal::database()->select(\Drupal\islandora_hierarchical_access\LUTGeneratorInterface::TABLE_NAME, 'lut')
->fields('lut', ['mid'])
->condition("lut.fid", $entity->id())
->execute()
->fetchCol();
foreach ($media as $mid) {
$media_entity = \Drupal::entityTypeManager()->getStorage('media')->load($mid);
if ($media_entity && !$media_entity->isPublished()) {
return \Drupal\Core\Access\AccessResult::forbidden('Media is not published.');
}
}
}
}

Loading…
Cancel
Save