--- view_own.module.b4mypatch 2011-05-23 13:01:37.000000000 -0700 +++ view_own.module 2011-05-23 13:01:18.000000000 -0700 @@ -103,6 +103,8 @@ function view_own_node_access_records($n 'grant_delete' => $delete_perm, 'priority' => 0, ); + } + } // -- access via selected field reference if (module_exists('content')) { $fields = content_fields(); @@ -113,6 +115,11 @@ function view_own_node_access_records($n $edit_via_ref_content = "edit $node->type content via $field_name"; $delete_via_ref_content = "delete $node->type content via $field_name"; + $roles_view = array_keys(user_roles(FALSE, $view_via_ref_content)); + $roles_edit = array_keys(user_roles(FALSE, $edit_via_ref_content)); + $roles_delete = array_keys(user_roles(FALSE, $delete_via_ref_content)); + +/* if ($field['module'] == 'nodereference') { $nid = $node->{$field_name}[0]['nid']; $uid = $node->uid; @@ -132,29 +139,35 @@ function view_own_node_access_records($n 'priority' => 0, ); } +*/ if ($field['module'] == 'userreference') { - $uid = $node->{$field_name}[0]['uid']; - $type = $field['type_name']; - $permission = $edit_via_ref_content; - $edit_perm = in_array($permission, $default_permissions[$rid]) ? 1 : 0; - $permission = $delete_via_ref_content; - $delete_perm = in_array($permission, $default_permissions[$rid]) ? 1 : 0; - $view_any_content = $view_via_ref_content; - $view_perm = (($edit_perm || $delete_perm) ? 1 : in_array($view_any_content, $default_permissions[$rid])); - $grants[] = array( + if($uid = $node->{$field_name}[0]['uid']) { + if($user_referenced = user_load($uid)) { + if($user_referenced->roles) { + $rids_referenced_user = array_keys($user_referenced->roles); + $type = $field['type_name']; + $edit_intersect = array_intersect($rids_referenced_user, $roles_edit); + $edit_perm = (empty($edit_intersect) ? 0 : 1); + $delete_intersect = array_intersect($rids_referenced_user, $roles_delete); + $delete_perm = (empty($delete_intersect) ? 0 : 1); + $view_intersect = array_intersect($rids_referenced_user, $roles_view); + $view_perm = (empty($view_intersect) ? 0 : 1); + $view_perm = (($edit_perm || $delete_perm || $view_perm) ? 1 : 0); + $grants[] = array( 'realm' => 'view_own_owner', 'gid' => $uid, 'grant_view' => $view_perm, 'grant_update' => $edit_perm, 'grant_delete' => $delete_perm, 'priority' => 0, - ); + ); + } + } + } } } } } - } - } // only 1 entry per gid per realm makes sense. // so, we combine this big grants array to grants with maximum rights $combined_grants = array();