Это начиная с 6.2 стандартный механизм, который странно не использовать. Кроме того часто загружаемая контроллером основная сущность участвует в определении полномочий, и получается, что её сначала грузит по аннотации IsGranted, а потом мы грузим повторно и повторно проверяем. Тогда если сущности нет ругается isGranted, а не наша проверка, которая может выдать более понятную и правильную ошибку.
Когда переделаем на ParamConverter, он, я надеюсь окажется в Request и тогда сборщики меню или хлебных крошек смогу не получать его из репозитория
Здесь же создать аннотацию уже сделали@NeedProjectContext проверяющую наличие контекста проекта. Чтобы не догадываться почему не сработало полномочие или неявно запретило действие.
И, вроде бы на этом все. Ну, стоит посмотреть что там с UserController но там вроде это не критично.