使用devise,拥有多个模型或角色的最佳方式是什么? 以下是我在应用中需要的模型或角色:
-Author: can upload content to the site
-Customer: pays a monthly fee to access the content
用户既可以是作者,也可以是客户。我认为他们可以共享相同的登录表单,因为他们都会使用他们的电子邮件地址登录。
我尝试过使用CanCan和rolify,但无法弄清楚如何在注册过程中添加不同的角色。当用户注册为作者时,他应该被赋予“作者”角色,当用户通过支付月费来注册时,他应该被赋予“客户”角色。我也不想使用角色的复选框。
有一个名为“作者”的导航链接,允许作者注册,然后有一个链接供用户通过付款和结算表单进行注册。根据单击的链接,应确定给出的角色。我应该在注册过程中在"user/sign_up/index?role=customer"
中传入网址中的角色参数吗?如果是这样,我如何设计在注册过程中使用它?
使用devise,CanCan和rolify,我该如何解决这个问题?我认为拥有一个User类可能会更好,然后让User和Author从User扩展,但是从StackOverflow上阅读许多类似的问题看起来似乎更容易。
我知道我要做的是非常基本的,我还没想到它。我一直在努力寻找解决方案。
更新 Danny在下面的回答推动我朝着正确的方向发展,我通过传递URL“users / sign_up?role = customer”或“users / sign_up?role = author”中的参数,设法在注册过程中正确添加角色。我不知道这是不是最好的方法,但这就是我到目前为止所做的。
我遇到的一个问题是,我的has_many关系现在如何运作?这就是我所拥有的:
class User < ActiveRecord::Base
rolify
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_one :plan
has_many :files
end
has_one:计划是针对客户的订阅计划 和has_many:文件 适用于可以上传客户可以访问的许多文件的作者 下载
问题是我还想跟踪用户的文件下载情况,因此我想提出has_many :downloads
或可能has_many :files, :through => :downloads
如果我将这些文件放在用户模型中,知道不允许非客户的作者下载文件并且不是作者的客户无法上传文件,这是否重要?
答案 0 :(得分:2)
从你的问题来看,我知道你已经“潜入”了rolify和cancan,所以我将专注于分配角色。
您通常会在seeds.rb文件中创建不同的角色,例如
[:admin, :author, :customer].each do |role|
Role.find_or_create_by_name({ name: role }, without_protection: true)
end
您在创建管理员时也会立即分配:admin角色,也可以在seeds.rb文件中使用
分配user.add_role :admin
对于您的其他角色,您可以“在适当的时候”分配它们,正如您所描述的那样。当用户单击“作者”链接并继续时,会触发某些控制器中的某些操作。您可以使用相同的
将该角色分配给该用户user.add_role :author
您还可以分配仅连接到某些对象的角色。例如。作者只是他自己创作的文件的作者。在这种情况下,您不希望分配“常规”作者角色,但您将分配它
user.add_role :author, document
在控制器的创建操作中,同时保存创建的文档。这种赋值的替代方法是在模型的回调中执行此操作。
更多问题?请问!