Rails 4设计强参数管理模型

时间:2013-11-22 04:50:57

标签: ruby-on-rails devise ruby-on-rails-4 admin strong-parameters

我使用设计制作了用户和管理员模型。我在 app / controllers / application_controller.rb 文件中使用了强参数

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :password, :remember_me) }
  end

end

如何将管理模型列入白名单?

devise_parameter_sanitizer.for(:sign_in) { |a| a.permit(:login, :password, :remember_me) }

另外,如何将admin sign_up列入白名单,以便不会将任何变量传递给它?我猜是

devise_parameter_sanitizer.for(:sign_up) { |a| a.permit()}

更新

我想编辑我的问题。

我的问题是如何让管理模型自动将我的管理员注册页面列入黑名单?如果我只是不做任何事情,那么我仍然可以通过“admins / sign_up”注册。当然我可以删除“app / models / admin.rb”中的注册,但我想拒绝命令行注册

- 使用范围视图并明确定义管理员和用户模型的每个视图是否明智? -

1 个答案:

答案 0 :(得分:0)

如果您为用户和管理员设置了单独的控制器,请尝试以下操作:

def configure_permitted_parameters
  if params[:controller] == "user"
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :password, :remember_me) }
  else
    devise_parameter_sanitizer.for(:sign_in) { |a| a.permit(:login, :password, :remember_me) }
    devise_parameter_sanitizer.for(:sign_up) { |a| a.permit()}

并且还有另一种方法,只为用户和管理员创建一个控制器,名为registrations_controller.rb,在您的用户表中有一个名为is_admin的字段,并且只有当用户是管理员时才为用户设置该字段。在seed.rb文件中创建种子以使管理员成为这样:

admin_user = User.new(email: "abc@xyz.com", password: "123", password_confirmation: "123", is_admin: "true" )
admin_user.skip_confirmation!
admin_user.save