【问题标题】:Strong Parameters: How to permit parameters using conditions强参数:如何使用条件允许参数
【发布时间】:2014-10-10 19:26:13
【问题描述】:

我不允许某些参数取决于当前用户的角色。

例如:如果用户是管理员,则仅允许 role 属性。

这可能吗?

【问题讨论】:

    标签: ruby-on-rails strong-parameters


    【解决方案1】:

    是的,这是可能的。

    你可以这样做:

    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? 听起来更好,特别是如果您以后可能想添加更多参数。
    • @rubyprince 感谢您的评论。你能解释一下为什么它比我的每个参数都使用&lt;&lt; 的解决方案更好吗? (只是为了理解)它是更快还是更“红宝石”方式......?
    • 我会说它更红宝石的方式和更易于维护。我可以这样写admin_only_parameters = [:role]; list_params_allowed += admin_only_parameters if current_user.admin?,然后更改admin_only_parameters
    • 是的,但是在 1 个元素的情况下,allowed_params &lt;&lt; :role 看起来比 allowed_params += [:role] 更清晰。而且在任何情况下,这样的结构都很容易重构。
    • 至少在强参数的 gem 版本(对于 Rails 3.2)中,permit 不会接受值数组。您需要这样做:params.require(:user).permit(*list_params_allowed) 将数组转换为方法的参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    相关资源
    最近更新 更多