如何用不同类型的用户建模系统?

时间:2014-03-08 11:48:03

标签: ruby-on-rails ruby roles user-permissions

我正在开发一家餐厅特许经营应用程序。我只需要使用用户模型并拥有安全密码。

class User < ActiveRecord::Base
    has_secure_password

现在,我将拥有不同类型的具有不同访问权限和报告的用户:

franchisor user (head office)
restaurant owner / franchisee
manager
waiter

建议设置模型/类的方法是什么? 我会为每个has_secure_password创建一个模型,还是将每个人都放入用户模型并为其分配类型?或者做某种继承多态?

2 个答案:

答案 0 :(得分:3)

我会在一个课程中执行此操作,并向用户添加role列,并为每个用户分配一个角色。

# in user.rb
class User < ActiveRecord::Base
  has_secure_password

  ROLES = %w[ franchisor restaurant_owner manager waiter ]
  validates :role, :inclusion => { :in => ROLES }

  ROLES.each do |role_name|        # generates for each ROLE a method like this:
    def #{role_name}?              #     def waiter?
      role == '#{role_name}'       #       role == 'waiter'
    end                            #     end
  end

这使您可以在需要不同权限时询问user.franchisor? || user.manager?之类的内容。

这很简单,也是一个很好的起点。只要它不会变得更复杂,我就会避免使用复杂的宝石。

答案 1 :(得分:2)

我强烈建议您使用Devise进行身份验证,CanCan来管理您的权限以及类似RolifyRole Model的内容,以便为不同类型的用户定义不同的角色。

我已经在这里编写了一个开始使用这些内容的教程:http://www.phase2technology.com/blog/authentication-permissions-and-roles-in-rails-with-devise-cancan-and-role-model/