Rails,设计多个模型登录及其会话
Rails, Devise multiple models login and their sessions
我有两个由 devise 生成的模型:Partner
和 Admin
。他们每个人都有自己的sessions currents and etc
。有些控制器只需要 Admin
登录,有些控制器需要 Partner
或 Admin
登录。
将在我的控制器中调用 :authenticate_admin!
和 :authenticate_partner!
方法 before_action
。
我也用CanCanCan来定义他们两个角色。
这给出了多个问题:
- 如果我以
Partner
身份登录,然后我打开了必须登录 Admin
的页面,然后我登录了,这意味着我将同时拥有两个 sessions
?
- 当我也是
Admin
时,我以 Partner
身份登录,所以我需要销毁 Admin
的会话。如何让Devise在当前模型登录时销毁其他模型会话?
我是否需要在需要 Admin
或 Partner
的控制器中添加类似的东西?
before_action :authenticate_partner!
before_action :authenticate_admin!
最后一个问题是:如何让 Partners
打开页面(即访问控制器)只有 CanCanCan 允许?
我想使用 authorize_resource
,每个控制器只要求一个模型。
你真的需要两个模型吗?也许你可以只拥有一个模型(称之为 User
),其角色是一个整数?
class User < ActiveRecord::Base
enum role: [ :partner, :admin ]
end
- 是的。每个模型有两个独立的设计范围,使用不同的会话变量。
- 当您登录另一个范围时,Devise 不会破坏范围会话,但您可以手动进行。有设计方法
sign_out(scope)
。在您的情况下,您可以在需要时调用 sign_out(:partner)
和 sign_out(:admin)
。还必须有这样的方法 sign_out_partner
、sign_out_admin
,由 Devise 自动为您的范围提供。另外,请注意 config.sign_out_all_scopes
设计选项。
- 是的,这些过滤器限制了对控制器操作的访问。
- 希望对您有所帮助How to integrate CanCan with multiple devise models?
我有两个由 devise 生成的模型:Partner
和 Admin
。他们每个人都有自己的sessions currents and etc
。有些控制器只需要 Admin
登录,有些控制器需要 Partner
或 Admin
登录。
将在我的控制器中调用 :authenticate_admin!
和 :authenticate_partner!
方法 before_action
。
我也用CanCanCan来定义他们两个角色。
这给出了多个问题:
- 如果我以
Partner
身份登录,然后我打开了必须登录Admin
的页面,然后我登录了,这意味着我将同时拥有两个sessions
? - 当我也是
Admin
时,我以Partner
身份登录,所以我需要销毁Admin
的会话。如何让Devise在当前模型登录时销毁其他模型会话? 我是否需要在需要
Admin
或Partner
的控制器中添加类似的东西?before_action :authenticate_partner! before_action :authenticate_admin!
最后一个问题是:如何让
Partners
打开页面(即访问控制器)只有 CanCanCan 允许?
我想使用 authorize_resource
,每个控制器只要求一个模型。
你真的需要两个模型吗?也许你可以只拥有一个模型(称之为 User
),其角色是一个整数?
class User < ActiveRecord::Base
enum role: [ :partner, :admin ]
end
- 是的。每个模型有两个独立的设计范围,使用不同的会话变量。
- 当您登录另一个范围时,Devise 不会破坏范围会话,但您可以手动进行。有设计方法
sign_out(scope)
。在您的情况下,您可以在需要时调用sign_out(:partner)
和sign_out(:admin)
。还必须有这样的方法sign_out_partner
、sign_out_admin
,由 Devise 自动为您的范围提供。另外,请注意config.sign_out_all_scopes
设计选项。 - 是的,这些过滤器限制了对控制器操作的访问。
- 希望对您有所帮助How to integrate CanCan with multiple devise models?