0

我正在开发一个需要基于角色的权限的 Rails 应用程序(我们称之为“隐藏”应用程序),但该应用程序不会处理用户身份验证。主应用程序设置一个加密的 cookie,而隐藏应用程序将其用作身份验证的证据。

隐藏应用需要实现多种角色;管理员、项目经理、编辑等。我正在使用一个授权插件,它创建一个roles表和一个users_roles表,并使用一个表来使用has_many用户表和角色表之间的关系users_roles。到目前为止所有漂亮的香草东西。

挑战在于主应用程序已经有一个users一个users_roles表。我有一个使用 Main 应用程序数据库(创建自定义连接)的 Main::User 模型,但是当尝试通过创建角色来利用授权基础结构时,操作失败,因为 ActiveRecord 正在使用来自 Main::User 的连接信息表,它尝试更新users_roles主应用程序中的表(这是不允许的)。我什至尝试删除 habtm 规范并使用带有 :through 选项的 has_many 宏来指定连接表,但 ActiveRecord 仍然使用 Main 数据库,因为连接是通过 Main::User 模型建立的。

下一步是实现 Rails 秘诀 15“连接到多个数据库”,但我缺少的部分是如何使我的本地参考模型 UsersReference 自动引用users主应用程序的表。配方提到,“这个解决方案当然需要在 product_references 表中创建必要的行,以匹配我们在备用数据库中拥有的任何产品。这可以批量完成,也可以在运行时自动完成。” 我宁愿不必维护双副本——有超过 425,000 个用户并且他们的状态一直在变化,所以进行批量更新的想法不是很受欢迎。

理想情况下,我希望配方中的 UsersReference 模型充当users表的代表。我想这将涉及在运行时自动从表中获取行users,如配方中所述。有没有人有这样做或类似的经验?我非常感谢你的想法。

4

1 回答 1

0

到目前为止,我已经通过删除 UsersReference 模型并在 Hidden 应用程序中创建一个 Users 模型来解决它。我已经定义了 User.find_user,它会检查用户 ID 是否在本地表中。如果不是,用户从 Main::User 模型中获取它并将其保存在本地。隐藏用户模型是用于授权的模型,它满足了授权插件的需求。我想要的最后一件事是隐藏 User.find 方法,这样它就不会被意外调用,但是创建一个 self.find(*arg) 并使其受保护或私有不起作用 - User.find仍然可以调用。

于 2009-10-28T20:35:36.090 回答