设计:仅允许管理员创建用户

时间:2014-05-27 01:07:01

标签: ruby-on-rails devise cancan

我有一个Rails 4应用程序。它与devise 3.2.3合作。设计正确整合。此时,用户可以注册电子邮件和密码,登录并执行CRUD操作。

现在我想做的是:我想创建一个admin,而不是让任何用户自己注册。 admin将保留创建用户的责任。我不希望用户自行注册。基本上,管理员将创建用户,向他们发放登录凭据,并通过电子邮件发送给他们。

我读过this帖子和类似的帖子在SO和设计维基中无济于事。

我已将boolean字段添加到users table以识别管理员用户。

class AddAdminToUser < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, :default => false
  end
end

我已阅读有关使用cancan管理用户的信息,但我不知道如何使用它来实现我的目标 我正在寻找的解决方案可能需要devisecancan的组合。

我很感激有关此问题的任何指导。

1 个答案:

答案 0 :(得分:0)

  1. 确保boolean:admin不在params.permit()区域中以获取强参数。
  2. 使用专家宝石,它是维护和几乎普通的老红宝石物体。
  3. 然后在你的UserPolicy中你会做这样的事情

    class UserPolicy < ApplicationPolicy
      def create?
        user.admin?
      end
    end
    

    你的模型看起来像这样

    class User < ActiveRecord::Base
      def admin?
        admin
      end
    end
    

    最后在您的控制器中,确保用户有权执行操作

    class UserController < ApplicationController 
      def create
        @user = User.new(user_params)
        authorize @user
      end
    end
    

    您可能还希望限制显示的可以访问管理员用户创建部分的按钮。这些也可以通过专家来完成。