Я работаю над приложением Rails, для которого требуются разрешения на основе ролей (назовем это «скрытым»), но приложение не будет обрабатывать аутентификацию пользователя. Главное приложение устанавливает зашифрованный cookie, а Скрытое приложение использует его в качестве доказательства аутентификации.
Скрытое приложение должно выполнять множество ролей; администратор, менеджер проекта, редактор и т. д. Я использую плагин авторизации , который создает таблицу roles
и таблицу users_roles
и использует отношения has_many
между таблицей пользователей и таблицей ролей с использованием users_roles
таблица. Пока что все довольно ванильно.
Сложность заключается в том, что в главном приложении уже есть таблица users
и a users_roles
. У меня есть модель Main :: User, которая использует базу данных основного приложения (создание настраиваемого соединения), но при попытке использовать инфраструктуру авторизации путем создания роли операция завершается неудачно, поскольку ActiveRecord использует информацию о соединении из Main :: User таблица, которая пытается обновить таблицы users_roles
в главном приложении (что недопустимо). Я даже пытался удалить спецификацию habtm и использовать макрос has_many с опцией: through для указания таблицы соединения, но ActiveRecord по-прежнему использует базу данных Main, потому что соединение устанавливается через модель Main :: User.
Следующим шагом было внедрение Rails Recipe 15 «Соединение с несколькими базами данных», но мне не хватает части, как заставить мою локальную эталонную модель UsersReference автоматически ссылаться на таблицу users
основного приложения. В рецепте упоминается: «Это решение, конечно, потребует создания необходимых строк в таблице product_references для соответствия любым продуктам, которые есть в альтернативной базе данных. Это можно сделать либо в пакетном режиме.
или автоматически во время выполнения. «Я бы предпочел не поддерживать двойные копии - более 425 000 пользователей и их статус постоянно меняются, поэтому идея выполнения пакетных обновлений не очень приятна.
В идеале я хотел бы, чтобы модель UsersReference из рецепта действовала в качестве делегата таблицы users
. Я предполагаю, что это будет включать автоматическое получение строк из таблицы users
во время выполнения, как описано в рецепте. Есть ли у кого-то опыт в этом или что-то подобное? Буду очень признателен за ваши мысли.