Simple node access control for users Users have 'edit own content' permission for content type 'diary'. When viewing own diary node, I would like to present a simple checkbox to 'make private'. Then only that user can view the node.

I've looked at some options for doing this:

1) Write a module that uses hook_node_access() - overkill?

2) Perhaps an existing content access module provides a useful hook?

3) Create a 'private yes/no' field, then use Editablefields module to expose it on view. Then use theming layer to hide if set to 'yes'. - clunky?

I'm learning to write simple modules so perhaps a good learning opportunity here, but not sure where to start.
I think you should create the field as suggested in 3 regardless of which method you choose for authorizing users to view content. Your first suggestion seems reasonable.
I would personally opt for method two, and use the Page Manager in Ctools. PM is a tool however, and as such requires both understanding and configuration to do what you ask.
Your third option, hiding in the theme, seems wrong however.