Rails,设计多个模型登录及其会话

Rails, Devise multiple models login and their sessions

我有两个由 devise 生成的模型:PartnerAdmin。他们每个人都有自己的sessions currents and etc。有些控制器只需要 Admin 登录,有些控制器需要 PartnerAdmin 登录。

将在我的控制器中调用 :authenticate_admin!:authenticate_partner! 方法 before_action

我也用CanCanCan来定义他们两个角色。

这给出了多个问题:

  1. 如果我以 Partner 身份登录,然后我打开了必须登录 Admin 的页面,然后我登录了,这意味着我将同时拥有两个 sessions
  2. 当我也是 Admin 时,我以 Partner 身份登录,所以我需要销毁 Admin 的会话。如何让Devise在当前模型登录时销毁其他模型会话?
  3. 我是否需要在需要 AdminPartner 的控制器中添加类似的东西?

    before_action :authenticate_partner!
    before_action :authenticate_admin!
    
  4. 最后一个问题是:如何让 Partners 打开页面(即访问控制器)只有 CanCanCan 允许?

我想使用 authorize_resource,每个控制器只要求一个模型。

你真的需要两个模型吗?也许你可以只拥有一个模型(称之为 User),其角色是一个整数?

class User < ActiveRecord::Base
   enum role: [ :partner, :admin ]
end
  1. 是的。每个模型有两个独立的设计范围,使用不同的会话变量。
  2. 当您登录另一个范围时,Devise 不会破坏范围会话,但您可以手动进行。有设计方法sign_out(scope)。在您的情况下,您可以在需要时调用 sign_out(:partner)sign_out(:admin)。还必须有这样的方法 sign_out_partnersign_out_admin,由 Devise 自动为您的范围提供。另外,请注意 config.sign_out_all_scopes 设计选项。
  3. 是的,这些过滤器限制了对控制器操作的访问。
  4. 希望对您有所帮助How to integrate CanCan with multiple devise models?