質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

966閲覧

ユーザー毎に暗号鍵をもった場合の理想的なMVCモデルについて

no1knows

総合スコア3365

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/05/29 03:20

実現したいこと

ユーザーIDに紐付いた暗号鍵を利用してアプリを作成した場合、どのようにすればRails的というか理想的なMVCモデルが構築ができるのでしょうか?

前提

  • Deviseを利用してユーザー管理を行っています。
  • ユーザーIDに紐付いた暗号鍵をyamlデータに保存しています。
  • 暗号化、復号には、ActiveSupport::MessageEncryptorを利用します。(参考サイト①)
  • 多くのモデルで暗号化の必要があるカラムがあります。(個人情報や銀行口座情報などで必須条件)

実現したこと

モデルからコントローラーの変数(current_user.id)を取得。(参考サイト②)
その変数を基に、yamlに保存してある暗号キーを取得して、暗号化、復号を行いました。(参考サイト①)

気になったこと

参考サイト②で「少なくともRailsのルールを基準として考えると、モデルからコントローラーの変数を取得するというアプリのデザインがそもそも間違っている」という記載がありました。
その考え方は、なんとなく分かるのですが・・・

参考サイト

①暗号化・復号の手順(ActiveSupport::MessageEncryptor利用)

A simple way to encrypt and decrypt in Rails 5
https://medium.com/@mayneweb/a-simple-way-to-encrypt-and-decrypt-in-rails-5-9a514645d066

②モデルからコントローラーの変数を取得する

Ruby on Rails - Access controller variable from model
https://stackoverflow.com/questions/2419120/ruby-on-rails-access-controller-variable-from-model

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

モデルからコントローラーの変数(current_user.id)を取得。(参考サイト②)
その変数を基に、yamlに保存してある暗号キーを取得して、暗号化、復号を行いました。(参考サイト①)

ここはちょっと奇妙な気はします。
モデルには暗号化済みの値を渡す感じのほうがよいのでは。

鍵のファイルを一種のDB...モデルと考えると、それに紐付いたencrypt, decryptのロジックがあって、そこにコントローラが処理を委託するイメージだとどうですか?

モデルは暗号化されたデータを保存するだけで、それ以上は意識しないように書いたほうが良い気がします。

投稿2019/05/29 05:23

otolab

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no1knows

2019/05/29 08:40

アドバイスいただきありがとうございます。 ロジック自体がシンプルならコントローラー側で暗号化、複合処理で良いと思うのですが、今回は複雑なのでファットコントローラーになってしまうのが心配です。
Ighrs

2019/05/29 10:03

なにもコントローラーとモデルの2つでしか書けないわけではありません 暗号化や復号化みたいものはライブラリ(libフォルダ)に分離して単独定義するとかはどうでしょう? テストも機能単位で行えるので楽ですよ コントローラーは分離した各種機能とモデルとを紐付ける制御だけ行うイメージです
no1knows

2019/05/31 01:56

Ighrsさん、ありがとうございます。 ライブラリフォルダというのは、そのようなときに使うのですね。 こちらであればRailsのルールに沿った形になりそうです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問