Ruby on rails 设计/CanCanCan-允许管理员创建新用户

Ruby on rails 设计/CanCanCan-允许管理员创建新用户,ruby-on-rails,devise,cancan,Ruby On Rails,Devise,Cancan,我使用的是rails 4.0.2,Desive and。我正在尝试允许管理员创建新用户。管理员用户在用户表中被分配一个布尔字段 在ability.rb中,我有以下几点: can :manage, :all if user.admin? 根据讨论中的一些建议,我创建了一个名为AdminsController的新控制器,看起来是这样的: class AdminsController < Devise::RegistrationsController def create

我使用的是rails 4.0.2,Desive and。我正在尝试允许管理员创建新用户。管理员用户在用户表中被分配一个布尔字段

在ability.rb中,我有以下几点:

can :manage, :all if user.admin?
根据讨论中的一些建议,我创建了一个名为AdminsController的新控制器,看起来是这样的:

class AdminsController < Devise::RegistrationsController
      def create
        build_resource(sign_up_params)
        if resource.save
          redirect_to admin_editors_path
        else
          clean_up_passwords resource
          respond_with resource
        end
      end

      def new
        build_resource({})
      end
end
在designe/registrations/edit.html中,我试图添加一个链接,允许用户创建一个新用户,如下所示:

<%= link_to "Create User", user_admin_path %>
问题是,该链接只是将我重定向到带有消息的主页

您已登录

我真的不确定我在这里错了什么,所以任何帮助都将不胜感激

上DeVICE::RegistrationController中的构建资源方法

根据会话生成新资源。在本例中,会话中的用户是管理员并已登录

您希望基于用户类的新用户实例而不是基于会话创建新用户

这样的办法应该行得通

class AdminsController < ApplicationController
 def new_user
  authorize! :manage, User
   @user = Users.new
 end
 def create_user
    @user = User.new(permitted_params.user)
    authorize! :manage, User
    if @user.save
     #success
    else
     #error
    end

 end
end
链接到新用户

<%= link_to "Create User", admins_new_user_path %>
形式

Allowed_params.user是PermittedParams类中的一个方法,它可能对您很方便

通过将当前用户传递到方法中,可以为不同的用户允许不同的参数

型号/允许参数s.rb

class PermittedParams < Struct.new(:params, :current_user)
  def user
    params.require(:user).permit(*user_attributes)
  end
  def user_attributes
    if current_user.admin?
      [:name, :email,:password, :password_confirmation, :role ,:admin]
    else
      [ :name, :email, :remember_me,:password, :password_confirmation, ]
    end
  end
end

我仍然会被重定向到主页,并显示您已登录的消息。你认为我的路线有问题吗?是的。对不起,我忽略了。你应该想出办法解决这个问题。我会更新我的答案。你应该解决这个问题,因为你只是创建了用户,而不是让他们登录或发送注册邮件。Desive只会把简单的用户创建搞砸。谢谢,这绝对是一个巨大的改进。我正在获取新的用户表单,但由于某些原因它无法保存。我的日志如下所示:在2014-04-03 14:00:50+0100时启动192.168.1.70的POST/admins/create_user,由AdminsControllercreate_user处理为HTML参数:{all_the_params,commit=>create user}用户加载4.7ms选择用户。*从用户中,users.id=1 ORDER BY users.id ASC LIMIT 1 0.2ms开始事务0.2ms回滚事务Hi,我在这里有一条错误消息:未定义的局部变量或方法'allowed_params',您能告诉我是什么问题吗?
get "admins/new_user" => "admins#new_user", as: :admins_new_user
post "admins/create_user/:id" = "admins/create_user", as: :admins_create_user
<%= link_to "Create User", admins_new_user_path %>
  <%= form_for(@user, :url => admins_create_user_path) do |f| %>
  #fields and submit
  <% end %>
class PermittedParams < Struct.new(:params, :current_user)
  def user
    params.require(:user).permit(*user_attributes)
  end
  def user_attributes
    if current_user.admin?
      [:name, :email,:password, :password_confirmation, :role ,:admin]
    else
      [ :name, :email, :remember_me,:password, :password_confirmation, ]
    end
  end
end