0

ロールベースのアクセス許可を必要とする Rails アプリケーション (「非表示」アプリケーションと呼びましょう) に取り組んでいますが、アプリケーションはユーザー認証を処理しません。Main アプリケーションは暗号化された Cookie を設定し、Hidden アプリケーションはそれを認証の証拠として使用します。

非表示アプリケーションは、さまざまなロールを実装する必要があります。管理者、プロジェクトマネージャー、編集者など。 テーブルとテーブルを作成し、テーブルを使用してユーザーテーブルとロールテーブルの間の関係を使用する認可プラグインを使用しています。これまでのところ、すべてのかなりのバニラのもの。rolesusers_roleshas_manyusers_roles

課題は、メイン アプリケーションに既にusersテーブルテーブルがあることusers_rolesです。Main アプリケーション データベースを使用する (カスタム接続を作成する) Main::User モデルがありますが、ロールを作成して承認インフラストラクチャを活用しようとすると、ActiveRecord が Main::User からの接続情報を使用しているため、操作が失敗します。これusers_rolesは、メイン アプリケーションのテーブルを更新しようとします (これは許可されていません)。habtm 仕様を削除して、has_many マクロを :through オプションで使用して結合テーブルを指定することも試みましたが、接続は Main::User モデルを介して設定されるため、ActiveRecord は引き続き Main データベースを使用します。

次のステップは、Rails レシピ 15「複数のデータベースへの接続」を実装することでしたが、ローカル参照モデルの UsersReferenceusersがメイン アプリケーションのテーブルを自動的に参照するようにする方法が欠けています。レシピには、「もちろん、このソリューションでは、代替データベースにある製品と一致するように、product_references テーブルに必要な行を作成する必要があります。これは、バッチで行うことも、実行時に自動的に行うこともできます。」二重コピーを維持する必要はありません。425,000 人を超えるユーザーがおり、そのステータスは常に変化しているため、バッチ更新を行うという考えはあまり受け入れられません。

理想的には、Recipe の UsersReference モデルがusersテーブルへのデリゲートとして機能することを望みます。usersレシピで説明されているように、実行時にテーブルから行を自動的に取得する必要があると思います。これまたはこのようなことをした経験のある人はいますか?あなたの考えに感謝します。

4

1 に答える 1

0

これまでのところ、UsersReference モデルを削除し、Hidden アプリで Users モデルを作成することで解決しました。ユーザー ID がローカル テーブルにあるかどうかを確認する User.find_user を定義しました。User でない場合は、Main::User モデルから取得し、ローカルに保存します。非表示ユーザー モデルは、認証プラグインのニーズを満たす認証に使用されるモデルです。私が最後にしたいのは、誤って呼び出されないように User.find メソッドを非表示にすることですが、self.find(*arg) を作成し、その保護またはプライベートを作成しても機能しませんでした -- User.findまだ呼び出し可能でした。

于 2009-10-28T20:35:36.090 に答える