Activeadmin自定义筛选器加密属性

时间:2014-01-07 18:31:38

标签: ruby-on-rails encryption activeadmin

我正在尝试让过滤器搜索加密字段。

例如,让我们说在rails控制台中,我可以执行以下操作:

u = User.find_by_email(“someone@example.com”)

并获得一位用户。

但是,如果我以这种方式获得用户:

u = User.find(1)

返回的对象具有加密的电子邮件属性。也就是说,我仍然可以通过以下方式收到该用户的电子邮件:

u.email

但是我不知道如何让Activeadmin / meta_search通过电子邮件进行过滤。

思想?

1 个答案:

答案 0 :(得分:0)

我不确定您是如何加密电子邮件字段的,或者为什么要阻止黑客在您的数据库中抓取它们?如果您不希望在数据库中公开属性,但希望能够在Controller或Model层中搜索它,那么您应该创建一个虚拟属性。这可以使用Ruby attr方法完成,电子邮件应该在创建时存储。

attr_accessible :email, :email_encrypted

attr_reader :email

def email=(email)
  @email = email
  self.email_encrypted = ENCRYPTION.create(email)
end

ENCRYPTION是您正在使用的任何加密库,例如BCRYPT。