I'm taking back what I said. You can somehow do this using CanCan but it seems like a stretch. Can you try the following?
if user.has_role? :guest
can :read, [Product, Vendor, Banner]
cannot :view_prices, Product
end
Then in your view, you have to manually check if the user can view prices
<% if can? :view_prices, Product %>
<%= product.price %>
<% end %>