diff --git a/islandora.api.php b/islandora.api.php index e553a894..6bc641b4 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -562,8 +562,14 @@ function hook_cmodel_pid_islandora_ingest_steps_alter(array &$steps, array &$for * the given object, or NULL to indicate that we are making no assertion * about the outcome. Can also be an array containing multiple * TRUE/FALSE/NULLs, due to how hooks work. + * + * If denying an action (such as ISLANDORA_VIEW_OBJECTS) on an object, + * it will not be automatically denied for the individual datastreams. + * Operations on datastreams must be explicitly denied in + * hook_islandora_datastream_access(). + * */ -function hook_islandora_object_access($op, $object, $user) { +function hook_islandora_object_access($op, AbstractObject $object, $user) { switch ($op) { case 'create stuff': return TRUE; @@ -602,7 +608,7 @@ function hook_cmodel_pid_islandora_object_access($op, $object, $user) { * about the outcome. Can also be an array containing multiple * TRUE/FALSE/NULLs, due to how hooks work. */ -function hook_islandora_datastream_access($op, $object, $user) { +function hook_islandora_datastream_access($op, AbstractObject $object, $user) { switch ($op) { case 'create stuff': return TRUE; diff --git a/islandora.module b/islandora.module index 29899c1b..97b75937 100644 --- a/islandora.module +++ b/islandora.module @@ -1965,6 +1965,10 @@ function islandora_islandora_datastream_access($op, AbstractDatastream $datastre module_load_include('inc', 'islandora', 'includes/utilities'); $result = islandora_namespace_accessible($datastream->parent->id) && user_access($op, $user); + if (($datastream->parent->state != 'A') && variable_get('islandora_deny_inactive_and_deleted', FALSE)) { + $result = ($result && user_access(ISLANDORA_ACCESS_INACTIVE_AND_DELETED_OBJECTS, $user)); + } + if ($result && $op == ISLANDORA_REGENERATE_DERIVATIVES) { module_load_include('inc', 'islandora', 'includes/derivatives'); $applicable_hook = FALSE;