我很难理解强大的障碍。据我所知,它可以防止大量分配您不允许的变量。但是在Hartl的tutorial中我还读到,如果没有强大的障碍,有人可以通过补丁请求改变任何用户的管理员状态(我认为不是大规模分配,因为那个& #39;只需要改变一个值)。但是,你如何为变量实现强对数:
例如,我有:
private
def user_params
params.require(:user).permit(:email,
:username,
#:verified,
#:admin,
#:moderator,
#:activated,
#:activated_at,
:password,
:password_confirmation)
end
现在,不应该允许那些我理解的破折号。否则,用户可以通过批量分配(或其他方式)更改其值。
然而:
强对策如何与这些问题相关?
答案 0 :(得分:0)
我不是专家,但据我所知:当您设置强参数时,通常会控制传递给update_attributes / create方法的内容。所以你要定义内在的东西:
params[:user][ ... ]
如果admin
更新user
,您不需要POST整个用户对象,您只需调用一个特定的函数即可更改{您想要更改的{1}}属性。换句话说:
user
在你的控制器中:
$.ajax(
{ "method": "PUT", "url": "/users/" + uid },
{ "task": "make_admin" }
);
答案 1 :(得分:0)
虽然最简单的情况是user_params
总是做同样的事情,并且被update_attributes
的所有调用使用,这只是最简单的情况。
根据当前用户的权限进行许可或者为不同的操作设置不同的许可列表是非常明智的(因此,可能只有创建操作中使用的许可列表允许:username
)。
您可以考虑的另一种模式是具有管理访问权限的管理员命名空间:Admin::UsersController
将允许更多字段发生变异,并且可能会暴露更多普通用户无法访问的功能或数据。