You are here

function hosting_client_node_access_records in Hostmaster (Aegir) 6

Implements hook_node_access_records().

File

modules/hosting/client/hosting_client.access.inc, line 192
Control client node access.

Code

function hosting_client_node_access_records($node) {
  if (hosting_client_disabling()) {
    return;
  }
  $grants = array();
  $base_grant = array(
    'realm' => 'hosting ' . $node->type,
    'grant_view' => TRUE,
    'grant_update' => TRUE,
    'grant_delete' => FALSE,
    'priority' => 1,
  );

  // tasks inherit from their parent
  if ($node->type == 'task') {
    $node = node_load($node->rid);
    $base_grant['grant_update'] = FALSE;
  }
  switch ($node->type) {
    case 'site':
      $base_grant['gid'] = $node->client;
      break;
    case 'client':
      $base_grant['gid'] = $node->nid;
      break;
    case 'package':
      $base_grant['grant_update'] = FALSE;
      break;
    case 'task':
    case 'server':

      // The rest of the node types are configuration, so only admin should see them.
      $base_grant['gid'] = HOSTING_ADMIN_CLIENT;
      break;
    case 'platform':
      $base_grant['gid'] = HOSTING_ADMIN_CLIENT;

      /*
            if (sizeof($node->clients)) {
       foreach ($node->clients as $cid => $client) {
         if ($cid != HOSTING_ADMIN_CLIENT) {
           $grants[] = array_merge($base_grant, array('gid' => $cid, 'grant_update' => FALSE));
         }
       }
            }
      */
      break;
    default:

      //Not hosting node, don't change access.
      return;
  }
  if (isset($base_grant['gid'])) {
    $grants[] = $base_grant;

    // this should _always_ happen.
    if ($base_grant['gid'] != HOSTING_ADMIN_CLIENT) {

      // Also give full access to the administrator user.
      $base_grant['gid'] = HOSTING_ADMIN_CLIENT;
      $grants[] = $base_grant;
    }
    return $grants;
  }
}