Suppose that I have controller
caches_page :index, :if => :user_not_signed_in?
What you want couldn't be achieved;
A page is cached or is not cached. The process checks the existence of a html file or process it.
Still you have two alternatives:
use action caching or fragment caching (not recommended)
more recommended: load user specific part with ajax so you'll only have one page always cached and specific data inserted dynamically (like stackoverflow)
Here are state of the art explanations: http://railslab.newrelic.com/scaling-rails