多个用户身份验证和授权

时间:2016-11-27 22:00:35

标签: ruby-on-rails devise pundit

我现在对授权和身份验证感到困惑。

首先,我需要告诉你我的项目。它将有两个主要模型:用户和专业人士。用户是请求服务的人。优点是提供服务的人。优点可以有非常不同的工作,因此我的项目中存储的数据类型非常不同。 我计划为专业人士(摄影师,婚礼策划师......)举办不同类型的工作设置不同的模特。这些模型将具有关系和“拥有”不同的其他模型(添加回形针的图像,网站链接......)。

我想我需要使用gems进行身份验证和授权(我有设计 Pundit

现在我的问题:

  • 我想让所有用户和专业人士通过相同的表单登录。 我想这是一个非常的设计。虽然在阅读了一些关于Devise之后,似乎每个模型都有一个登录信息。但是这个帖子提到了Devise“群组” https://gorails.com/forum/devise-with-multiple-user-models-with-single-login-form 它肯定会解决我单个表单登录的问题吗?

  • 我希望每个Pros子模型都能向任何类型的用户甚至是来宾展示他们的记录预览。但是当Pro登录时,他们可以访问具有更多信息的扩展配置文件视图(所有可以更改的个人数据,来自用户的价格请求等)。你能证实这是Pundit的工作吗?

1 个答案:

答案 0 :(得分:1)

Pundit是实现第二点的完美选择。您可以限制某些操作(例如编辑/更新)只能由拥有该帐户的专业人员实现。 ProPolicy中这些操作的代码如下所示:

def edit?
  update?
end

def update?
  record.pro == user
end

关于使用Devise进行多个用户模型身份验证的问题,您能否解释一下为什么您只为两个用户设置一个登录表单?您可以在登录按钮上有一个下拉列表,用户可以选择他是普通用户还是专业用户。或者您甚至可以在表单上选择一个复选框/选择,他们可以选择要使用的登录类型。

如果没有,那么您将以某种方式检查您的数据库以查看Pro或User表中是否存在登录。但是,我认为这意味着您不能同时使用同一封电子邮件同时拥有专业版和用户帐户。