Как сделать авторизацию по двум таблицам в Symfony?

Для реализации авторизации по двум таблицам в Symfony, можно воспользоваться механизмом под названием "User Provider" и описать свой собственный провайдер пользователей.

Прежде всего, создайте две сущности для представления пользователей из двух разных таблиц. Например, сущности User и Admin, которые будут представлять пользователей из таблиц users и admins соответственно.

Далее необходимо создать два пользовательских поставщика (User Provider), один для каждой таблицы. Реализуйте интерфейс UserProviderInterface для обоих провайдеров и определите методы загрузки пользователя по имени пользователя, поиск пользователя по идентификатору и проверку подлинности пароля.

Примерно так могут выглядеть методы вашего пользовательского провайдера:

public function loadUserByUsername($username)
{
    // Логика поиска пользователя по имени пользователя в таблице users или admins
}

public function refreshUser(UserInterface $user)
{
    // Логика обновления пользователя
}

public function supportsClass($class)
{
    return in_array('SymfonyComponentSecurityCoreUserUserInterface', class_implements($class));
}

После создания пользовательских поставщиков, зарегистрируйте их в конфигурации безопасности вашего проекта:

security:
    providers:
        user_provider:
            id: AppSecurityUserProvider
        admin_provider:
            id: AppSecurityAdminProvider

И, наконец, в настройках вашего firewal добавьте конфигурации для разделения пользователей по двум провайдерам:

security:
    firewalls:
        main:
            provider: user_provider
            # Здесь остальные настройки
        admin:
            provider: admin_provider
            # Здесь настройки для администраторов

Теперь Symfony будет использовать соответствующего провайдера для аутентификации пользователей в зависимости от выбранного firewal.

Таким образом, с помощью описанных шагов вы сможете реализовать авторизацию по двум таблицам в Symfony, разделив пользователей на разные группы и обеспечив безопасность вашего приложения.