node_access check against array of node ids
How about adding checking if the node has reference of current user while fetching related nodes.

So, 

$related_nodes = &lt;get_related_node&gt;;  

  // Might look Dumb
  function get_related_node($user=NULL) {
    if(is_null($user)) {
      global $user;
    }
    db_select('node','n')
     //Your existing joins
     // One more join for the user reference field, :O
     -&gt;leftJoin('field_data_userreference','ur','ur.entity_id=n.nid')
     // your existing conditions for query.
     // One more condition for the current user as the value on the field.
     -&gt;condition('ur.entity_id',$user-&gt;uid,'=')
    // And the execution continues.
  }


Fields mahcine names to be fixed as per the names provided. It should filter your reference nodes while fetching.