在Rails应用程序中混淆ID
我试图模糊离开服务器的所有ID,即ID出现在URL和HTML输出中。
我写了一个简单的Base62 lib,它有方法编码和解码。 定义或更好地覆盖ActiveRecord的id方法以返回id的编码版本,并调整控制器以使用解码的params[:id]
加载资源,从而得到所需的结果。 现在,id在URL中编码为base62,响应显示正确的资源。
现在我开始注意到通过has_many
关系定义的子资源没有加载。 例如,我有一个名为User
的记录has_many
Post
s。 现在User.find(1).posts
为空,尽管有些post的user_id = 1
。 我的解释是,ActiveRecord必须将Post
的user_id
与User
的方法 id
进行比较 – 我已经覆盖了 – 而不是与self[:id]
进行比较。 所以基本上这使得我的方法毫无用处。
我想要的是在模型中定义obfuscates_id
并且其余部分将被处理,即在适当的位置进行所有编码/解码并防止服务器返回id。
有没有可用的gem或有人有提示如何实现这一目标? 我敢打赌,我不是第一个尝试这个的人。
您所描述的内容听起来像是一个URL slug的专门应用程序。 看看acts_as_sluggable或friendly_id等插件。 另请参阅覆盖User模型上的to_param方法。
也许从这里开始: Rails的最佳永久化