質問: ### 実現したいこと ユーザーIDに紐付いた暗号鍵を利用してアプリを作成した場合、どのようにすればRails的というか理想的なMVCモデルが構築ができるのでしょうか? ### 前提 * Deviseを利用してユーザー管理を行っています。 * ユーザーIDに紐付いた暗号鍵をyamlデータに保存しています。 * 暗号化、復号には、`ActiveSupport::MessageEncryptor`を利用します。(参考サイト1) * 多くのモデルで暗号化の必要があるカラムがあります。(個人情報や銀行口座情報などで必須条件) ### 実現したこと モデルからコントローラーの変数(current_user.id)を取得。(参考サイト2) その変数を基に、yamlに保存してある暗号キーを取得して、暗号化、復号を行いました。(参考サイト1) ### 気になったこと 参考サイト2で「少なくともRailsのルールを基準として考えると、モデルからコントローラーの変数を取得するというアプリのデザインがそもそも間違っている」という記載がありました。 その考え方は、なんとなく分かるのですが・・・ ### 参考サイト 1暗号化・復号の手順(`ActiveSupport::MessageEncryptor`利用) A simple way to encrypt and decrypt in Rails 5 2モデルからコントローラーの変数を取得する Ruby on Rails - Access controller variable from model
回答: > > モデルからコントローラーの変数(current_user.id)を取得。(参考サイト2) > > その変数を基に、yamlに保存してある暗号キーを取得して、暗号化、復号を行いました。(参考サイト1) > > > ここはちょっと奇妙な気はします。 モデルには暗号化済みの値を渡す感じのほうがよいのでは。 鍵のファイルを一種のDB...モデルと考えると、それに紐付いたencrypt, decryptのロジックがあって、そこにコントローラが処理を委託するイメージだとどうですか? モデルは暗号化されたデータを保存するだけで、それ以上は意識しないように書いたほうが良い気がします。