Hide a field for that particular row based on value from custom table
$view-&gt;field['request_access']-&gt;options['exclude'] = TRUE;


Exclude will always exclude the field for every single row. 

What you need to do is set it to null or empty ''

$result-&gt;field_request_access = null; // hide request


A possible downfall is that a user could guess, or have someone tell them the direct link, and still be able to see /node/656.

Thus; in addition, to what you're already doing, should also use hook_node_access

/*
 * Implements hook_node_access()
 */
function access_node_custom_node_access($node, $op, $account) {
  if($node-&gt;nid == 656 &amp;&amp; $op == 'view'){
    // some db_query here
    if ($something_is_true) {
      return NODE_ACCESS_ALLOW;
    }
    else {
      return NODE_ACCESS_DENY;
    }
  }
}


If the person does not have access, the above will automatically hide any "view" link in Views.