Этап
Готова
Тип
Ошибка
Приоритет
Обычный
Трудоемкость
Обычная
Создана
Дата создания
3 года назад
Назначена
Обновлена
3 года назад

В сущности User есть атрибут $roles и функция getRoles().

Проблема в том, что функция является одновременно и геттером атрибута $roles и реализацией интерфейса UserInterface

Мы её используем как реализацию интерфейса и в ней к глобальным ролям прикладываем и роли проекта, это работает и используется например в списке пользователей, да и в бейдже пользователя. Но доктрина работает с ней некорректно (удивительно что вобще работает), и заново загружает атрибут projectusers даже если он уже загружен, например join’ом.

Сейчас атрибут $roles используется фактически как флаг ROLE_ROOT. В будущем возможно там будет ROLE_MANAGER или кто подобный, поэтому превращать его в флаг, чтобы потом вновь сделать полем неразумно. Но можно его переименовать во что-то, вроде globalRoles. Так мы решим конфликт.

Панель управления

Комментарии могут оставлять только авторизованные пользователи
 demius 3 года назад

готова

 demius 3 года назад

Так же надо разобраться с ролью USER_ROLE. Например для тех, кому можно смотреть список пользователей

 demius 3 года назад

Удобный способ контроля страница http://tndt.loc:4001/user.managment/list.

В обычной ситуации в ней примерно 10 запросов в зависимости от количества юзеров.

При корректной работе 6 и от количества пользователей не зависит.

В дебаге можно видеть, как пагинатор выбирает пользователей с left join на projectUsers, а затем некорректно работающий getRoles() отдельно для каждого пользователи делает еще один select на его projectUsers. Если закоментить добавление projectUsers в массив $roles (причем работать с ним можно), сразу же эти запросы исчезают