Regular Drupal 7 site users do not see new tabs added by hook_menu_local_tasks_alter I used hook_menu_local_tasks_alter to add new tab items for node pages like so:

function custom_module_menu_local_tasks_alter(&amp;$data, $router_item, $root_path) {
  if (arg(0) == 'admin' || arg(0) != 'node') { return; }

  $href='user/'.arg(1).'/hobbies';
  $data['tabs'][0]['output'][] = array(
    '#theme' =&gt; 'menu_local_task',
    '#link' =&gt; array(
      'title' =&gt; t('Hobbies'),
      'href' =&gt; $href,
    ),
  );
  $href='user/'.arg(1).'/events';
  $data['tabs'][0]['output'][] = array(
    '#theme' =&gt; 'menu_local_task',
    '#link' =&gt; array(
      'title' =&gt; t('Events'),
      'href' =&gt; $href,
    ),
  );


However while admin can see the new tabs, regular users (Drupal 7) do not. Adding '#access' =&gt; TRUE, to item array does not help as hook_menu_local_tasks_alter doesn't have options for access argument. 

And they appear normally if users are given node edit permission. 

How can I make access to these new tabs without giving users permission to edit their nodes?
You have to use hook_permission

So in your module file something like this will do the job. (taken from the hook's page).

function hook_permission() {
 return array(
  'administer my module' =&gt; array(
  'title' =&gt; t('Administer my module'),
  'description' =&gt; t('Perform administration tasks for my module.'),
  ),
 );
}


When you do that you will get a new entry in your permissions page (admin/people/permissions). Enable that for the anonymous users and it will show up ok.