[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.

Plone Foundation Code of Conduct