ruby-on-rails – 如何有效地搜索加密字段?
发布时间:2020-12-17 02:06:52 所属栏目:百科 来源:网络整理
导读:我正在使用 Ruby on Rails 4.1,Ransack和attr_encrypted.我有敏感数据存储在我的数据库中,我想使用gem attr_encrypted保护它. 正如我所料,在使用Ransack搜索加密的测试数据时,我得到的结果为零. 我尝试了以下解决方案,但它似乎对我不起作用.我的印象是load函
我正在使用
Ruby on Rails 4.1,Ransack和attr_encrypted.我有敏感数据存储在我的数据库中,我想使用gem attr_encrypted保护它.
正如我所料,在使用Ransack搜索加密的测试数据时,我得到的结果为零. 我尝试了以下解决方案,但它似乎对我不起作用.我的印象是load函数用于返回解密值. ReportsController def index @report_list = Report.all.load @q = @report_list.search(params[:q]) @reports = @q.result(distinct: true).order('created_at DESC') end 有没有人有过搜索加密数据的经验,可以帮助我生成一个可行的解决方案? 解决方法
load将导致Active Record Collection执行查询并检索与您的查询匹配的结果(除了运行after_create回调,我认为这是您正在发生的解密的地方).
def index #returns all records in DB @report_list = Report.all.load #I'm surprised these aren't throwing undefined method search of Array (or something similar) @q = @report_list.search(params[:q]) @reports = @q.result(distinct: true).order('created_at DESC') end 我想在此之前,我通常手动做这件事并且不熟悉attr_encrypted或Ransack,但我相信这些概念足够通用它们可以应用于任何设置.那么,关于你的问题,有两种可能性. 如果你可以搜索确切的值: Model.where(encrypted_field: encrypt(params[:value])).first 其中encrypt是一种加密并返回传递的字符串的方法. 其次(痛苦地) Model.all.delete_if{|m| !m.encrypted_field.include?(params[:value]) } 这将逐字地拉取,解密和扫描数据库中的每个条目. 我强烈建议不要这样做,但你需要做你需要做的事情. 如果您绝对需要加密信息,但仍需要能够进行此类搜索.我强烈建议在模型中添加某种标签.这将允许您删除敏感信息,但仍然按一些属性搜索. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |