具有强params白名单的控制器的基本原理

时间:2015-08-04 04:50:15

标签: ruby-on-rails strong-parameters

在我看过的大多数Rails应用程序中,控制器列出了提交属性时允许或不允许的属性。

class PersonsController < ApplicationController
  # rest of code
  def person_params
    params.require(:person).permit(:name)
  end
end

我们看不到类似

的内容
# Hypothetical code only
class Person < ActiveRecord::Base
  def my_param_whitelist
    [:name]
  end
end

即使在模型类中使用白名单似乎更加干燥。

具有白名单的控制器的理由是什么,而不是正在修改的模型?

1 个答案:

答案 0 :(得分:2)

我从未在技术上考虑太多,但这是一个直觉答案。

如果你在模型中声明允许的参数,是的,这会使代码保持干燥,你不必在每个控制器中重复自己,但这意味着必须与模型通信的每一段代码都必须通过相同的白名单。

但是,如果将允许的参数保留在控制器中,则可以允许不同的控制器拥有自己的白名单。

例如,用户(UserController)可能无法更改他/她的注册用户名/电子邮件,但管理员(AdminController)可能能够这样做。在这种情况下,UserController和AdminController有自己的允许参数的白名单。