Refactor read-only control

This reduces complexity and line-count, but also ensures that new controllers
get the functionality automatically (unless they don't inherit from
ApplicationController).
Undo accidental change
Merge commit '358870f0f8f7a0cfdde47577e8b4aab2d9536a75' into HEAD