--- private_nodes.module.original 2007-08-22 11:01:29.000000000 +0200 +++ private_nodes.module 2007-10-05 10:37:10.000000000 +0200 @@ -114,6 +114,15 @@ function private_nodes_check_access($uid $is_admin = user_access('administer_users'); + + $node = node_load(array('nid' => $nid)); + $type = $node->type; + $nodetypes = private_nodes_get_node_types(); + + if (user_access('user can view private node of type: ' . $nodetypes[$type])) { + return true; + } + if ($is_owner || $is_admin || $level == PRIVATE_NODES_PUBLIC) { return true; } @@ -343,18 +352,28 @@ global $user; //if we're selecting nodes, make sure we don't get any private ones if(($primary_field=='nid' && ($primary_table=='n' || $primary_table=='node')) &! (user_access('administer_users') || user_access('administer_content'))){ - $return['join'] = "LEFT OUTER JOIN {private_nodes} pn ON pn.nid = {$primary_table}.nid"; + $return['join'] = "LEFT OUTER JOIN {private_nodes} pn ON pn.nid = {$primary_table}.nid"; if($user->uid){ + + $types = private_nodes_get_node_types(); + $permissions = ""; + if(is_array($types)){ + foreach ($types as $v) { + if (user_access('user can view private node of type: ' . $v)) { + $permissions = $permissions . " OR {$primary_table}.type = '" . $v ."'"; + } + } + } if (function_exists('private_nodes_get_uid_of_buddies')) { $buddies=private_nodes_get_uid_of_buddies($user->uid); if(is_array($buddies)){ //user has buddies $buddies=implode(',',private_nodes_get_uid_of_buddies($user->uid)); - $return['where'] = "(pn.nid is null OR (pn.level=".PRIVATE_NODES_BUDDIES." AND {$primary_table}.uid IN (".$buddies.")) OR {$primary_table}.uid=".$user->uid.")"; + $return['where'] = "(pn.nid is null OR (pn.level=".PRIVATE_NODES_BUDDIES." AND {$primary_table}.uid IN (".$buddies.")) OR {$primary_table}.uid=".$user->uid." $permissions)"; }else{ //user doesn't have any buddies - $return['where'] = "(pn.nid is null OR {$primary_table}.uid=".$user->uid.")"; + $return['where'] = "(pn.nid is null OR {$primary_table}.uid=".$user->uid." $permissions)"; } } @@ -525,6 +544,10 @@ function private_nodes_perm() { $permissions[] = 'users can set access on ' . $v; } } + + foreach ($types as $v) { + $permissions[] = 'user can view private node of type: ' . $v; + } $permissions[] = 'administer private nodes';