我正在开发一个需要基于角色的权限的Rails应用程序(让我们称之为“隐藏”应用程序),但应用程序不会处理用户身份验证。 Main应用程序设置加密的cookie,Hidden应用程序使用它作为身份验证的证据。
隐藏的应用程序需要实现各种角色;管理员,项目经理,编辑等。我正在使用authorization plug创建一个roles
表和一个users_roles
表,并在用户表和用户表之间使用has_many
关系使用users_roles
表的角色表。到目前为止所有漂亮的香草味道。
挑战在于主应用程序已经有一个users
表和一个users_roles
表。我有一个使用Main应用程序数据库的Main :: User模型(创建自定义连接),但是当尝试通过创建角色来利用授权基础结构时,操作失败,因为ActiveRecord正在使用Main :: User中的连接信息table,尝试更新Main应用程序中的users_roles
表(不允许)。我甚至尝试删除habtm规范并使用带有:through选项的has_many宏来指定连接表,但ActiveRecord仍然使用Main数据库,因为连接是通过Main :: User模型建立的。
下一步是实现Rails Recipe 15“连接到多个数据库”,但我缺少的部分是如何使我的本地参考模型UsersReference自动引用Main应用程序的users
表。该配方提到,“此解决方案当然需要在product_references表中创建必要的行,以匹配我们在备用数据库中的任何产品。这可以批量完成
或者在运行时自动。“我宁愿不必维护双重副本 - 有超过425,000个用户,他们的状态一直在变化,因此进行批量更新的想法并不是很可取。
理想情况下,我希望Recipe中的UsersReference模型充当users
表的委托。我想这将涉及在运行时自动从users
表中获取行,如配方中所述。有没有人有这样做或类似的经验?我非常感谢你的想法。
答案 0 :(得分:0)
到目前为止,我已通过删除UsersReference模型并在隐藏应用程序中创建用户模型来解决它。我已经定义了User.find_user,它检查用户ID是否在本地表中。如果不是用户从Main :: User模型中获取它并将其保存在本地。隐藏用户模型是用于授权的模型,它满足授权插件的需要。我想要的最后一件事是隐藏User.find方法,以便不会被意外调用,但创建一个self.find(* arg)并使该受保护或私有不起作用 - User.find仍然可以赎罪。