サーバーを離れるすべてのID、つまりURLとHTML出力に表示されるIDを難読化しようとしています。
エンコードとデコードのメソッドを持つ単純なBase62ライブラリを作成しました。ActiveRecordのidメソッドを定義して、エンコードされたバージョンのidを返すように上書きし、コントローラーを調整して、デコードされたリソースをロードするとparams[:id]
、目的の結果が得られます。IDはURLでbase62エンコードされ、応答には正しいリソースが表示されます。
has_many
今、私は関係を通して定義されたサブリソースがロードされていないことに気づき始めました。User
たとえば、私はそれと呼ばれるレコードを持っていhas_many
Post
ます。が付いた投稿がありますが、現在User.find(1).posts
は空user_id = 1
です。私の説明では、ActiveRecordは、と比較するのuser_id
ではなく、のメソッドと(私が上書きPost
した)メソッドを比較する必要があります。つまり、基本的にこれは私のアプローチを役に立たなくします。 id
User
self[:id]
私が欲しいのはobfuscates_id
、モデルで定義するようなもので、残りは処理されます。つまり、適切な場所ですべてのエンコード/デコードを実行し、サーバーからIDが返されないようにします。
利用可能な宝石はありますか、または誰かがこれを達成するためのヒントを持っていますか?私はこれを最初に試したのではないに違いない。