Ruby on rails 使用Desive和Rails 4为多种类型的用户建模

Ruby on rails 使用Desive和Rails 4为多种类型的用户建模,ruby-on-rails,ruby,devise,cancan,sti,Ruby On Rails,Ruby,Devise,Cancan,Sti,我有3种类型的“用户” 商店 供应商 顾客 最后两个用户将具有类似的属性,例如 名字 姓 等等 而商店用户类型在不同类型之间的对比度最大 就行为而言,他们都会有很大的不同,尽管供应商和商店会改变许多客户行为 看起来这些行为可以像我研究过的那样被处理 我现在正在尝试如何验证这些类型 我已经看过了STI模型,但我无法理解这些额外的属性应该放在哪里 我的思维模式是跟随者: 用户是一个表和模型 这些类型是从中继承的抽象模型 因此,我想知道,如何为商店类型添加业务地址等属性 或者是用户表有一个名为Type

我有3种类型的“用户”

商店 供应商 顾客

最后两个用户将具有类似的属性,例如

名字 姓 等等

而商店用户类型在不同类型之间的对比度最大

就行为而言,他们都会有很大的不同,尽管供应商和商店会改变许多客户行为

看起来这些行为可以像我研究过的那样被处理

我现在正在尝试如何验证这些类型

我已经看过了STI模型,但我无法理解这些额外的属性应该放在哪里

我的思维模式是跟随者:

用户是一个表和模型 这些类型是从中继承的抽象模型

因此,我想知道,如何为商店类型添加业务地址等属性


或者是用户表有一个名为Type的列,并且该类型与这些类型表关联?在类型表中还有额外的属性?

甚至不用费心把designe引入其中;设计用于身份验证而非授权身份验证确定访问您网站的人是否是您认为的人,如登录授权决定是否允许用户执行某种操作,如创建新帖子

你要做的是有一个系统,给一个普通用户分配三种不同的类型;坎坎会做类似的事情。一种自行实现的方法是使用基于数字的权限系统。假设普通用户的权限级别为100,商店级别为50,提供商级别为25。使用此系统,您可以确定用户可以执行哪些操作,而无需创建单独的模型,这将使您的模式变得不必要的复杂。下面是一个示例,说明如何使用UserController:

def show
  if current_user.permissions == 100
     render "customer_show"
  elsif current_user.permissions == 50
     render "shop_show"
  else
     render "provider_show"
  end
end
最简单的方法是在用户的表中添加一个名为permissions的列,在创建新行时默认为100。下面是迁移的情况:

def change
  add_column :users, :permissions, :integer, default: 100
end

至于认证,不用担心。让设计做它的事情;每个用户,不管是什么类型,都会以相同的方式登录和注册,可能只是每个用户都有一个单独的表单,其中有一个隐藏的字段来设置特定类型用户的权限级别。

我知道我参加聚会晚了,但我将此发布给未来的搜索者。您可以使用Desive授权操作。如果您已经为“买方”和“卖方”设计了模型,那么您可以为您只希望买方能够执行的任何操作添加“买方登录”。您还可以执行更具体的基于角色的授权-签出


总而言之,齐格的解决方案听起来很有趣。让我们知道,如果你有任何成功与它

谢谢你的回复。现在,在我看来,我可以使用CanCan权限之类的东西来自动化这个“基于权限编号的系统”,对吗,或者CanCan只是基于用户类型吗?其次,我想知道如何更改每种类型用户的注册。用户表将包含每种类型的额外属性。我理解这是如何解决行为问题的,但我不知道这些额外的属性将走向何方。如果属性包含在同一个用户表中,这是否意味着接受每种用户类型都将包含从未打算使用的无用字段?