Каждый роут должен быть уникален. уникальность роута задается, собственно, параметром name. Если вы его не указываете name генерируется автоматически из имени контроллера и имени экшна. Если вы в проекте указываете два экшна с одинаковым именем роута, у вас всегда сработает тот, который объявлен первым/последним (тут точно не помню).
Назовите роуты api_product_get и admin_product_get
В symfony для этих целей есть EquatableInterface. Каждый раз при загрузке кешированного юзера из токена, если у вас класс User имплементирует EquatableInterface запускается проверка соответствия сохраненного пользователя в токене и полученным из провайдера данным. Если данные не совпадают, токен авторизации аннулируется.
Проще говоря, в вашем случае - реализуйте у класса User EquatableInterface и добавьте в isEqualTo() проверку совпадения ролей.
NodeJS, фреймворка express должно хватить для ваших целей, в случае чего легко масштабируется и расширяется всевозможными сокетами и прочими плюшками.
Тем более есть опыт работы с ним.