I faced similar problem and solved it like this. But is this solution is specific for cancan gem.
application_controlller.rb
def actual_user
@actual_user ||= current_user.present? ? current_user : current_volunteer
end
def current_ability
@current_ability ||= Ability.new(actual_user)
end