How do I debug permissions?
One way you can do is make a custom module, print access info on every page, every node, every block. 

menu_get_item() function return a router item which has access_arguments property for current page. 

/**
 * Show access permission of current page.
 */
function yourmodule_get_page_access() {

  $router_item = menu_get_item();
  if ($router_item) {

    $access_arguments = unserialize($router_item['access_arguments']);

    $arguments = array();
    foreach ($access_arguments as $access_argument) {
      $arguments[] = $access_argument;
    }
    if ($arguments) {
      $output  = '&lt;p&gt;';
      $output .= t('This page needs user to have %p permission(s) to access', array(
        '%p' =&gt; implode(', ', $arguments),
      ));
      $output .= '&lt;/p&gt;';
    }
    else {
      $output = '&lt;p&gt;' . t('This page needs no user permissions') . ' &lt;/p&gt;';
    }
    return $output;
  }
}


Then you can hook_page_alter, to display the access info on top of every page.

/**
 * Implements hook_page_alter().
 *
 * Display access information on top of every page.
 */
function yourmodule_page_alter(&amp;$page) {

  // Make a new area on top of the page for displaying access information.
  $page['content']['theverytop']['#markup'] = yourmodule_get_page_access();
  $page['content']['theverytop']['#weight'] = -10;
  $page['content']['#sorted'] = FALSE;
}


Next you can display out the block permission info like this:

/**
 * Implement hook_block_alter
 *
 * To display block permission information to the block title.
 */

function yourmodule_block_view_alter(&amp;$data, $block) {
  $delta = $block-&gt;delta;
  $output = '';

  $rid = db_query("SELECT rid FROM {block_role} WHERE delta = :delta", array(':delta' =&gt; $delta))-&gt;fetchCol();

  if (empty($rid)) {
      $output = ' This block does not have any role permission restriction.';
  } else {
      $output = ' This block is viewable for users have role(s): ';
      foreach ($rid as $role_id) {
          $rolename = db_query("SELECT name from {role} where rid = :rid", array(':rid' =&gt; $role_id))-&gt;fetchField();
          $output .= $rolename . ' ';
      }
  }

  // append the permission info to block title for every block
  $block-&gt;title .= $output;
}


And so forth, basically the same concept, you can do the same to node, form, views. 
Hope this helps.