--- private_nodes.module.original	2007-08-22 11:01:29.000000000 +0200
+++ private_nodes.module	2007-10-05 10:14:26.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,29 @@ 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();
+      $types = array ("comunicazione","movimento","resoconto","scheda_sabbat");
+      $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 +545,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';
 
