--- view_own.module 2008-09-04 05:19:48.000000000 +0100 +++ view_own.module 2008-10-20 14:37:05.381000000 +0100 @@ -35,6 +35,18 @@ $perms[] = 'view any '. $type->type .' content'; } } + if (module_exists('content')) { + $fields = content_fields(); + foreach ($fields as $field) { + $field_name = $field['field_name']; + $type = $field['type_name']; + if ($field['module'] == 'nodereference' || $field['module'] == 'userreference') { + $perms[] = "view $type content via $field_name"; + $perms[] = "edit $type content via $field_name"; + $perms[] = "delete $type content via $field_name"; + } + } + } return $perms; } @@ -94,6 +106,56 @@ 'grant_delete' => $delete_perm, 'priority' => 0, ); + // -- access via selected field reference + if (module_exists('content')) { + $fields = content_fields(); + foreach ($fields as $field) { + $field_name = $field['field_name']; + if ($field['type_name'] == $node->type) { + $view_via_ref_content = "view $node->type content via $field_name"; + $edit_via_ref_content = "edit $node->type content via $field_name"; + $delete_via_ref_content = "delete $node->type content via $field_name"; + + if ($field['module'] == 'nodereference') { + $nid = $node->{$field_name}[0]['nid']; + $uid = $node->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; + $edit_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( + 'realm' => 'view_own_owner', + 'gid' => $uid, + 'grant_view' => $view_perm, + 'grant_update' => $edit_perm, + 'grant_delete' => $delete_perm, + '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; + $edit_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( + 'realm' => 'view_own_owner', + 'gid' => $uid, + 'grant_view' => $view_perm, + 'grant_update' => $edit_perm, + 'grant_delete' => $delete_perm, + 'priority' => 0, + ); + } + } + } + } } } return $grants;