我有3种类型的“用户”
商店 提供商 客户
最后2位用户将拥有类似的属性,例如
名字 姓 等等
Shop用户类型在类型之间的对比度最大。
就行为而言,尽管提供商和商店将固有许多客户行为,但它们都将完全不同。
在我研究过的时候,行为似乎可以用CanCan处理。
我现在正在尝试如何验证这些类型。
我看过STI模型,但我无法掌握这些额外属性的位置。
我的心理模型如下:
用户是表格和模型 这些类型是从中继承的抽象模型。
所以我想知道,如何为商店类型添加商家地址等属性?
或者用户表是否有一个名为Type的列,该类型是否与这些类型表相关联?在类型表中是额外的属性吗?
答案 0 :(得分:2)
不要费心把Devise带进去;设计适用于身份验证 而不是 授权。 身份验证正在确定访问您网站的用户是否是您认为的人,例如登录。授权决定是否允许用户执行某种排序动作,比如创建一个新帖子。
你想要做的是拥有某种系统,为普通用户分配三种不同的类型; CanCan会做那样的事情。自行完成此操作的一种方法是使用基于权限号码的系统。我们假设普通用户的权限级别为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
最简单的方法是在用户的表中添加一个名为权限的表,默认情况下在创建新行时会说100。这就是迁移的样子:
def change
add_column :users, :permissions, :integer, default: 100
end
至于身份验证,请不要担心。让设计做到这一点;每个用户,无论是什么类型,都会以相同的方式登录和注册,也许每个用户都有一个单独的表单,每个用户都有一个隐藏字段来设置该特定用户的权限级别。
答案 1 :(得分:0)
我知道我已经迟到了,但我正在为未来的SO搜索者提出这个问题。您可以使用Devise授权操作。如果您为“买方”和“买方”设计模型'卖家'你可以添加'buyer_signed_in?'无论您采取何种行动,您都希望买家能够做到。您还可以执行更具体的基于角色的授权 - 请查看Devise' page
总而言之,Tsiege的解决方案听起来很有趣。如果您有任何成功,请告诉我们!