在Rails中创建管理员/用户帐户的工作流程

时间:2016-08-08 18:23:26

标签: ruby-on-rails authentication database-design devise rubygems

我在Ruby on Rails中构建事件注册系统。我需要管理员用户和普通用户。是否有任何最佳做法可以手动创建管理员用户,而不是让任何随机的人"注册"作为管理员?另外,有什么办法可以阻止注册吗?

(我考虑使用Devise宝石)

1 个答案:

答案 0 :(得分:0)

选项#1

对于大多数情况,我发现的最简单的方法是简单地向用户模型添加admin(布尔)属性(我通常使用Devise,但这适用于任何User模型):

# db migration
class AddAdminToUsers < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

然后,感谢ActiveRecord,您将在admin?模型上自动拥有User方法:

<% if current_user.admin? %>
  <%= # super-secret admin-only option %>
<% end %>

然后,您的注册页面将与原来相同,新用户将默认默认为admin = false。然后,您可以实现“Useradmin = trueAdmin::UsersController#edit,但您希望...例如在应用管理区域的Admin视图中。

选项#2

但是,如果您需要管理员用户拥有自己的视图/路由/逻辑/等,则可能值得将它们分成自己的User模型(设计也支持此功能)。这将为您提供两个单独的模型,每个模型都有自己的路径,视图和控制器。一个缺点是将Admin提升为admin意味着实际上将记录从一个表移动到另一个表。这个选项有很多开销,但如果你需要单独的逻辑,最终会变得更加清晰。

您使用的模式最终取决于您自己的方案。如果您需要单独的视图/路由/逻辑来管理管理员用户,请选择#2。如果您只是检查/path/to/virtualenv/bin/python requests/setup.py install属性就可以逃脱,那么#1会更简单。

Devise illustrates both patterns in more detail here.