The method fails completly when a controller fails (like in the case of CMS-12194).
It should be more resilient and ignore the controller (with a log) just like it is done in the hasRight method.
Controller should also be more resilient, to avoid ignoring all the context of a controller when a context fails.