大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 仅允许Rails强参数中的某些可能值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class User < ActiveRecord::Base DEFAULT_ROLES = %w[developer entrepreneur] ROLES = ['admin','entrepreneur','developer'] def has_role?(rolE) roles.include?(role.to_s) end def is?(rolE) has_role?(rolE) end def roles=(roles) self.roles_mask = (roles & ROLES).map { |r| 2**ROLEs.index(r) }.inject(0,:+) end def roles ROLEs.reject do |r| ((roles_mask.to_i || 0) & 2**ROLEs.index(r)).zero? end end end
在应用的注册页面中,我希望用户选择他们是“企业家”还是“开发者”.但是,我想确保他们无法为自己(或任何其他人)分配任何其他角色,除非他们已经是管理员.
我的第一个想法是在role =方法中通过改变它看起来像这样做
def roles=(roles) unless current_user.is?(:admin) validates_inclusion_of roles,:in => DEFAULT_ROLES end self.roles_mask = (roles & ROLES).map { |r| 2**ROLEs.index(r) }.inject(0,:+) end
但是,正如我发现的那样,你无法从模型内部访问current_user(如果你考虑它我觉得有意义……)
我的下一次尝试是看看我是否可以使用Strong Parameters执行此操作.
我期待它看起来像这样(我正在使用设计,覆盖RegistrationsController)
class RegistrationsController < Devise::registrationsController private def sign_up_params if (user_signed_in?) && (current_user.is?(:admin)) params.require(:user).permit(:name,:school,:email,:password,:password_confirmation,{roles: User::rOLES}) else params.require(:user).permit(:name,{roles: User::DEFAULT_ROLES}) end end def account_update_params if (user_signed_in?) && (current_user.is?(:admin)) params.require(:user).permit(:name,:current_password,:about_me,{roles: User::rOLES}) else params.require(:user).permit(:name,:current_password) end end end
但是,当我尝试这个时,我得到了这个:
这让我觉得我误解了强参数的真正作用.
是否可以根据用户在强参数中的角色来限制用户可以为任何给定字段输入的值?如果没有,是否有不同的方法来实现这一目标?
class RegistrationsController < Devise::registrationsController private def sign_up_params parameters = params.require(:user).permit(:name,roles: []) unless (user_signed_in?) && (current_user.is?(:admin)) parameters[:roles] = parameters[:roles].reject { |h| !User::DEFAULT_ROLEs.include? h } parameters end end def account_update_params if can? :assign_roles,:all params.require(:user).permit(:name,roles: []) else params.require(:user).permit(:name,:current_password) end end end
我刚刚将参数[:roles]中的参数过滤掉,只包含User :: DEFAULT_ROLES中包含的值(如上面的问题所示),然后返回参数对象.
以上是大佬教程为你收集整理的ruby-on-rails – 仅允许Rails强参数中的某些可能值全部内容,希望文章能够帮你解决ruby-on-rails – 仅允许Rails强参数中的某些可能值所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。