I'm not sure if this is a bug or by design (but it's certainly causing some discussion over in this issue with organic groups: http://drupal.org/node/1182338).
The issue comes when a user attempts to download a file stored by a field, using the private file system:
- file_file_download() runs, which figures out which field the file belongs to;
- it then calls field_access() on the field to see if the user has access to that field;
- field_access() invokes the hook_field_access() hooks.
However, the value of $field passed to the various hook_field_access() implementations does not include a 'field_name' which one would expect. Here's an example:
[fid] => 12
[display] => 1
[uid] => 7
[filename] => sample.pdf
[uri] => private://sample.pdf
[filemime] => application/pdf
[filesize] => 208268
[status] => 1
[timestamp] => 1312296292
[type] => application