How to replace teaser/content for anonymous users
You can separate teaser from body as a new field, and use module "Field permissions" or similar modules.You can control access for that field.

Another way is custom module which use hook_node_view or hook_node_grants_alter to control if user can access node.