在Rails应用程序中混淆ID

时间:2010-05-11 22:21:09

标签: ruby-on-rails activerecord obfuscation base62

我正在尝试模糊离开服务器的所有ID,即ID出现在URL和HTML输出中。

我写了一个简单的Base62 lib,它有方法编码和解码。定义或更好地覆盖ActiveRecord的id方法以返回id的编码版本,并调整控制器以使用解码的params[:id]加载资源,从而获得所需的结果。现在,id在URL中编码为base62,响应显示正确的资源。

现在我开始注意到通过has_many关系定义的子资源没有加载。例如我有User has_many个名为Post的记录。现在User.find(1).posts为空,但有user_id = 1的帖子。我的解释是,ActiveRecord必须将user_id的{​​{1}}与Post的{​​strong>方法 id进行比较 - 我已经覆盖了 - 而不是与User比较。所以基本上这会使我的方法无用。

我想要的是在模型中定义self[:id]并且其余部分将被处理,即在适当的位置进行所有编码/解码并防止id返回服务器。

有没有可用的宝石,或者有人有提示如何实现这一目标?我敢打赌,我不是第一个尝试这个的人。

1 个答案:

答案 0 :(得分:3)

您所描述的内容听起来像是一个URL slug的专门应用程序。看看acts_as_sluggable或friendly_id等插件。另请参阅覆盖User模型上的to_param方法。

也许从这里开始:Best Permalinking for Rails