我试图混淆所有离开服务器的 id,即出现在 URL 和 HTML 输出中的 id。
我编写了一个简单的 Base62 库,其中包含编码和解码方法。定义(或更好)覆盖 ActiveRecord 的 id 方法以返回 id 的编码版本,并调整控制器以加载解码后的资源params[:id]
给我想要的结果。id 现在在 url 中采用 base62 编码,响应显示正确的资源。
现在我开始注意到通过has_many
关系定义的子资源没有加载。例如,我有一个名为sUser
的记录。has_many
Post
现在User.find(1).posts
是空的,虽然有帖子user_id = 1
。我的解释是 ActiveRecord 必须将user_id
ofPost
与我已经覆盖的方法 id
进行User
比较,而不是与self[:id]
. 所以基本上这使我的方法毫无用处。
我想要的是obfuscates_id
在模型中定义类似的东西,其余的将被处理,即在适当的位置进行所有编码/解码并防止服务器返回 id。
是否有任何可用的宝石或有人暗示如何做到这一点?我敢打赌我不是第一个尝试这个的人。