[Traversal] in-traversal hook for arbitrary content-types?

I am currently redesigning a functionality where you can mark an arbitrary content object through a behavior as unavailable. An unavailable object would show up with a standard/custom text "I am available" or with a redirect to a configurable URL (configured through the behavior).

The current implementation assigns a marker interface for unavailable object (which is fine).
Marking a folder as unavailable make also all subcontent unavailable.

The question is how to hook into the traversal in order to intercept each component of a traversal for performing the check "are you marked as unavailable". __bobo_traverse__ is not an option because this functionality should work without touch any other code.

Thoughts?

Maybe in some way using the zope.traversing.interfaces.IBeforeTraverseEvent?

This fires only before the traversal (and gives you access to the Plone root object).

Sounds like workflow to me?

Maybe take a look into the Link redirect behavior, sound similar.

I have the following use case: Pseudo-Security with PIN for all Views via Behavior. The Editor can enable the PIN-Behavior, but he does not have to do it . A little Checkbox enable and generate a random PIN. The first part, the implementing of the behavior is not the Problem, but how can i override all Views in a general way to check the condition and redirect, only if needed, to a PIN Check-Form. Should i use a custom Event or a Browserlayer or is there an other mechanism? Any Ideas?

In a viewlet? I remember using the example on training.plone.org as a guideline for something similar.
Check if enabled in the index() method, and use update() to render the PIN form.

Plone Foundation Code of Conduct