Version 16
This is what I have found through testing to accomplish the following:
1. Don't allow public registration
2. Don't allow checkout as guest
3. Maintain use of the Sales Price field
Follow the guide below, but instead of setting the sales price on products to $0, do the following.
1.Use the "Pricelists" feature with "Advanced price rules" and create a pricelist named "Sales Price", for example, then create a rule for a 0% discount on all products. On the "Configuration" tab of the new pricelist, make sure to set the website, then use developer mode to set this pricelist as the default for new contacts as this now replaces the system default "Public Pricelist".
2. In the original "Public Pricelist", create a fixed price rule to set all products to $0. Go to the "Configuration" tab and uncheck the "Selectable" box.
https://www.odoo.com/forum/help-1/how-can-i-force-visitors-to-register-before-seeing-prices-on-an-ecommerce-website-in-odoo-16-239736