我有以下表格:
users
======
id
email
password
..device columns..
providers
==========
user_id
..irreverent columns..
consumers
==========
user_id
..irrelevant columns..
消费者和提供商都属于users
表,我们正在使用这种设计,因为双方都可以访问网络应用程序的某些区域,但是,有时会有特定于提供商的区域,消费者不应该这样做。提供者,例如提供者管理小组。
因此,这提出了以下问题:如果只知道提供者特定的命名空间而不是提供者/消费者,我如何让Devise只对提供者而不是特定于提供者的命名空间的消费者进行身份验证?
以下是我认为我应该做的事情:
before_action :authenticate_provider!
private
#A modified wrapper around authenticate_user!
def authenticate_provider!
authenticate_user!
redirect_to sign_in_path unless Provider.find_by(user: current_user)
end
答案 0 :(得分:1)
您可能需要考虑的一些事项:
您可以为users表创建角色属性,而不是为提供者和使用者使用单独的表。这种设计似乎更适合您的需求。
如果要根据用户是提供者还是消费者来限制对站点某些部分的访问,则需要授权而不是身份验证。假设您已经拥有了用户的角色属性,那么您可以使用以下代码来执行您不希望消费者访问的控制器操作:
#
def new
redirect_to root_path, alert: "Unauthorized access." if current_user.role == "consumer"
end
如果有帮助,请告诉我。