You are here

function menu_item_visibility_node_access in Menu Item Visibility 8

Implements hook_node_access().

File

./menu_item_visibility.module, line 111
Allows restricting access to menu items and menu path per role.

Code

function menu_item_visibility_node_access(NodeInterface $node, $op, AccountInterface $account) {
  $config = \Drupal::config('menu_item_visibility.settings');
  $mlid_list = $config
    ->get('mlid');
  if (!empty($mlid_list)) {
    $mlid_list = array_keys(array_filter($mlid_list, function ($value) {
      return !empty($value['access_check']);
    }));
  }
  if (!empty($mlid_list)) {
    foreach ($mlid_list as $value) {
      $check_result = \Drupal::database()
        ->select('menu_tree', 'mtr')
        ->fields('mtr', array(
        'route_param_key',
      ))
        ->condition('id', $value, '=')
        ->execute()
        ->fetchAssoc();
      $visiblity = menu_item_visibility_check($value);
      if (!empty($check_result)) {
        $param_key = $check_result['route_param_key'];
        $params = explode("=", $param_key);
      }
      if (isset($params[1]) && $node
        ->id() == $params[1] && !$visiblity) {
        return AccessResult::forbidden();
      }
    }
  }
  return AccessResult::neutral()
    ->setCacheMaxAge(0);
}