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).