【发布时间】:2014-10-10 19:26:13
【问题描述】:
我不允许某些参数取决于当前用户的角色。
例如:如果用户是管理员,则仅允许 role 属性。
这可能吗?
【问题讨论】:
标签: ruby-on-rails strong-parameters
我不允许某些参数取决于当前用户的角色。
例如:如果用户是管理员,则仅允许 role 属性。
这可能吗?
【问题讨论】:
标签: ruby-on-rails strong-parameters
是的,这是可能的。
你可以这样做:
def user_params
# List of common params
list_params_allowed = [:email, :title, :last_name, :first_name, :phone]
# Add the params only for admin
list_params_allowed << :role if current_user.admin?
params.require(:user).permit(list_params_allowed)
end
这样,如果以后你有新的参数,你只需要添加一个列表(避免错误)。
如果您要为管理员添加多个参数,您可以这样做:
list_params_allowed << :role << other_param << another_param if current_user.admin?
希望对您有所帮助。
【讨论】:
list_params_allowed += [:role] if current_user.admin? 听起来更好,特别是如果您以后可能想添加更多参数。
<< 的解决方案更好吗? (只是为了理解)它是更快还是更“红宝石”方式......?
admin_only_parameters = [:role]; list_params_allowed += admin_only_parameters if current_user.admin?,然后更改admin_only_parameters。
allowed_params << :role 看起来比 allowed_params += [:role] 更清晰。而且在任何情况下,这样的结构都很容易重构。
params.require(:user).permit(*list_params_allowed) 将数组转换为方法的参数。