В сущности User есть атрибут $roles и функция getRoles().
Проблема в том, что функция является одновременно и геттером атрибута $roles и реализацией интерфейса UserInterface
Мы её используем как реализацию интерфейса и в ней к глобальным ролям прикладываем и роли проекта, это работает и используется например в списке пользователей, да и в бейдже пользователя. Но доктрина работает с ней некорректно (удивительно что вобще работает), и заново загружает атрибут projectusers даже если он уже загружен, например join’ом.
Сейчас атрибут $roles используется фактически как флаг ROLE_ROOT. В будущем возможно там будет ROLE_MANAGER или кто подобный, поэтому превращать его в флаг, чтобы потом вновь сделать полем неразумно. Но можно его переименовать во что-то, вроде globalRoles. Так мы решим конфликт.