A common task is to make site membership conditional, for example to only allow paying users to login. This can easily be implemented by modifying your :py:obj:Products.membrane.interfaces.IMembraneUserAuth` implementation to perform extra checks.
The most common approach is to use a custom workflow to manage this. As an example we can use a simple workflow with two states:
You can check the workflow state in your authenticateCredentials method. Here is a basic example:
from Products.CMFCore.utils import getToolByName def authenticateCredentials(self, credentials): # Check the workflow to see if the user paid his membership wt = getToolByName(self, 'portal_workflow') review_state = wt.getInfoFor(self, 'review_state') if review_state=='unpaid': return None # The user paid, so do the normal authentication if credentials['password']==self.password: return (self.UID, self.login) else: return None