Je travaille sur une application Rails qui nécessite des permissions basées sur les rôles (appelons l'application "Caché"), mais l'application ne traitera pas l'authentification des utilisateurs. L'application principale définit un cookie crypté et l'application cachée l'utilise comme preuve d'authentification.Modèle de délégué pour la base de données distante Rails?
L'application masquée doit implémenter une variété de rôles; administrateur, gestionnaire de projet, éditeur, etc. J'utilise un authorization plug dans lequel crée une table roles
et une table users_roles
et utilise les relations has_many
entre la table utilisateur et la table de rôles en utilisant une table users_roles
. Toutes les jolies choses de vanille jusqu'ici. Le problème est que l'application principale a déjà une table users
et une table users_roles
. J'ai un modèle Main :: User qui utilise la base de données principale de l'application (création d'une connexion personnalisée), mais en essayant de tirer parti de l'infrastructure d'autorisation en créant un rôle, l'opération échoue car ActiveRecord utilise les informations de connexion de Main :: User table, qui tente de mettre à jour les tables users_roles
dans l'application principale (ce qui n'est pas autorisé). J'ai même essayé de supprimer la spécification habtm et d'utiliser la macro has_many avec l'option: through pour spécifier la table de jointure, mais ActiveRecord utilise toujours la base de données principale car la connexion est configurée via le modèle Main :: User. L'étape suivante consistait à implémenter la Rails Recipe 15 "Connecting to Multiple Database", mais la partie qui me manque est comment rendre mon modèle de référence local, UsersReference, référence automatiquement la table users
de l'application principale. La recette mentionne: «Cette solution exigerait, bien sûr, que les lignes nécessaires soient créées dans la table product_references pour correspondre à tous les produits que nous avons dans la base de données alternative, soit dans le lot , soit automatiquement lors de l'exécution. Je préfère ne pas avoir à conserver deux copies - il y a plus de 425 000 utilisateurs et leur statut change tout le temps, donc l'idée de faire des mises à jour par lots n'est pas très acceptable.
Idéalement, je voudrais que le modèle UsersReference de la recette agisse en tant que délégué au tableau users
. J'imagine que cela impliquerait d'obtenir automatiquement les lignes de la table users
lors de l'exécution, comme décrit dans la recette. Est-ce que quelqu'un a de l'expérience à faire ceci ou quelque chose comme ça? J'apprécierais grandement vos pensées.