You are here

function node_privacy_byrole_node_access_records in node privacy byrole 6

Same name and namespace in other branches
  1. 5 node_privacy_byrole.module \node_privacy_byrole_node_access_records()

Implementation of hook_node_access_records().

File

./node_privacy_byrole.module, line 64
Set node access permissions by role.

Code

function node_privacy_byrole_node_access_records($node) {
  if (node_privacy_byrole_disabling()) {
    return;
  }
  node_privacy_byrole_nodeapi_prepare($node);
  $grants = array();
  $user_edit_perm = empty($node->node_privacy_byrole['author']['edit']) ? 0 : 1;
  $user_delete_perm = empty($node->node_privacy_byrole['author']['delete']) ? 0 : 1;
  $user_view_perm = $user_edit_perm || $user_delete_perm ? 1 : (empty($node->node_privacy_byrole['author']['view']) ? 0 : 1);

  // permission for node owner
  if ($node->uid > 0) {
    $grants[] = array(
      'realm' => 'node_privacy_byrole_user',
      'gid' => $node->uid,
      'grant_view' => $user_view_perm,
      'grant_update' => $user_edit_perm,
      'grant_delete' => $user_delete_perm,
      'priority' => 0,
    );
  }

  // permission for node roles
  foreach (array_keys(user_roles()) as $rid) {
    $edit_perm = $node->node_privacy_byrole['roles'][$rid]['edit'] ? 1 : 0;
    $delete_perm = $node->node_privacy_byrole['roles'][$rid]['delete'] ? 1 : 0;
    $view_perm = $edit_perm || $delete_perm ? 1 : $node->node_privacy_byrole['roles'][$rid]['view'];
    $grants[] = array(
      'realm' => 'node_privacy_byrole_role',
      'gid' => $rid,
      'grant_view' => $view_perm,
      'grant_update' => $edit_perm,
      'grant_delete' => $delete_perm,
      'priority' => 0,
    );
  }
  return $grants;
}