Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用不同类型的用户对系统进行建模?_Ruby On Rails_Ruby_Roles_User Permissions - Fatal编程技术网

Ruby on rails 如何使用不同类型的用户对系统进行建模?

Ruby on rails 如何使用不同类型的用户对系统进行建模?,ruby-on-rails,ruby,roles,user-permissions,Ruby On Rails,Ruby,Roles,User Permissions,我正在开发一个餐厅特许经营应用程序。我只需要使用一个用户模型,并且有一个安全的密码 class User < ActiveRecord::Base has_secure_password 设置模型/类的推荐方法是什么? 我会为每个人创建一个模型,并为每个人提供一个安全的密码,还是我会将每个人放入用户模型并为他们分配一个类型?或者执行某种类型的继承多态性?我强烈建议使用来进行身份验证、管理权限等,或者为不同类型的用户定义不同的角色 我已经编写了一个教程,在这里开始学习:我将在一个类

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

class User < ActiveRecord::Base
    has_secure_password
设置模型/类的推荐方法是什么?
我会为每个人创建一个模型,并为每个人提供一个安全的密码,还是我会将每个人放入用户模型并为他们分配一个类型?或者执行某种类型的继承多态性?

我强烈建议使用来进行身份验证、管理权限等,或者为不同类型的用户定义不同的角色


我已经编写了一个教程,在这里开始学习:

我将在一个类中完成这项工作,并为用户添加一个
角色
列,并为每个用户分配一个角色

# 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.rb中的
#
类用户{:in=>ROLES}
ROLES.each do | role_name |#为每个角色生成如下方法:
定义#{role#u name}?#服务员?
角色=='{role_name}'#角色=='服务员'
结束#结束
结束
这允许您询问
user.franchissor?|user.manager?
当您需要不同的权限时


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

谢谢你的帮助。你能解释一下def{role\u name}吗?role=='{role\u name}'我以前没见过。@spuggy这就是元编程。该块迭代
角色
数组中的所有
角色
名称,并为每个
角色
创建一个方法,检查当前
角色
是否具有给定的
角色
。当您在这里不使用元编程时,您需要自己实现所有这些方法。更改
角色时需要添加或删除方法。请参阅更新的答案,我添加了一个生成的示例。
# 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