agu*_*ren 8 ruby authentication roles ruby-on-rails
我正在构建一个包含四种不同用户类型的库存管理应用程序:admin,employee,manufacturer,transporter.我还没有开始编码,但这就是我的想法.制造商和运输商与has_many有关:通过与产品的多对多关联,如下所示:
class Manufacturer < ActiveRecord::Base
has_many :products
has_many :transporters, :through => :products
end
class Product < ActiveRecord::Base
belongs_to :manufacturer
belongs_to :transporter
end
class Transporter < ActiveRecord::Base
has_many :products
has_many :manufacturers, :through => :products
end
Run Code Online (Sandbox Code Playgroud)
所有四种用户类型都可以登录,但它们将具有不同的权限和视图等.但是,我不认为我可以将它们放在同一个表(用户)中,因为它们会有不同的要求,即:供应商制造商必须拥有帐单邮寄地址和联系信息(通过验证),但管理员和员工不应该拥有这些字段.
如果可能的话,我希望有一个登录屏幕,而不是4个不同的屏幕.
我不是要求确切的代码来构建它,但我无法确定实现它的最佳方法.任何想法将不胜感激 - 谢谢!
你的基本方法看似合理.我建议你创建一个User类的基类,并将STI用于特定的User类型,例如:
class User < ActiveRecord::Base
end
class Manufacturer < User
has_many :products
has_many :transporters, :through => :products
end
Run Code Online (Sandbox Code Playgroud)
...等等.这样,如果需要将多个用户类型聚合到一个关系中而不管类型如何,则通常会有一个表来描述用户.这是一种相当常见的方法.
根据不同用户对系统的访问权限,您可能需要查看"声明授权"等角色管理gem .
对于多用户系统,通常首选的方法是-使用角色模型或STI。如果您的用户可以同时具有多个角色,例如单个用户是制造商和运输商,那么基于角色的系统将是一个很好的解决方案。如果用户角色是固定的,那么我认为您应该选择STI。