在 Rails 中创建 admin/user 个帐户的工作流程

Workflow for admin/user accounts creation in Rails

我正在 Rails 的 Ruby 中构建事件注册系统。我需要管理员用户和普通用户。是否有任何最佳实践来手动创建管理员用户并且不让任何随机的人 "Sign Up" 作为管理员?另外,一般情况下有什么方法可以防止注册吗?

(我正在考虑使用 Devise gem)

选项#1

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

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

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

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

然后,您的注册页面将与之前相同,新用户将默认为 admin = false。然后,您可以根据需要将 "promoting" Users 实现到 admin = true...例如在应用管理区域的 Admin::UsersController#edit 视图中。

选项#2

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


使用哪种模式最终还是要看你自己的场景。如果您需要单独的 views/routes/logic 来管理管理员用户,请选择 #2。如果您可以只检查 admin 属性,那么 #1 就简单多了。

Devise illustrates both patterns in more detail here.