Laravel

Laravel Accessor/Mutatorを使って透過的にフィールドを暗号化/復号するサンプル

投稿日:

DBに入っているデータを決まった書式/形式に変換して表示したり、
逆に逆変換して保存する例は多いかと思います。

変換,逆変換の実装方法は以下みたいな感じかと..。
いずれも変換/逆変換の存在を忘れて仕様が抜けたり、
同じことを他でも書くコードクローンが発生する原因になる。

  • Controllerにダラダラと変換/逆変換を書く
  • EloquentにオレオレSetter/Getterを書く

Accessor/Mutatorを使うことで上記の原因を無くすことができます。

Accessor/Mutator

Eloquentのメンバ変数(つまり、テーブルのフィールド)へのアクセスを
ある規則をもってEloquentに定義したSetter/Getterを仲介するように強制できます。

Accessors and mutators allow you to format Eloquent attribute values when you retrieve or set them on model instances. For example, you may want to use the Laravel encrypter to encrypt a value while it is stored in the database, and then automatically decrypt the attribute when you access it on an Eloquent model.

In addition to custom accessors and mutators, Eloquent can also automatically cast date fields to Carbon instances or even cast text fields to JSON.

暗号化/復号 サンプル

標題の通りですが、Accessor/Mutatorを使ってフィールドを暗号化/復号してみます。
Cryptファサードを使ってAES-256-CBCの暗号化/復号を行う対です。
secretvalueというフィールドにAES256CBCで暗号化して書き込み、復号して読み込みます。

透過的に呼び出す例です。
Userのsecretvalueフィールドに"hogehoge"という値を設定しています。
hogehogeという平文を暗号化してsecretvalueフィールドに書き込む処理は使う側には見えません。

Userのsecretvalueフィールドを読み込んで出力しています。
暗号化済み文字列を復号する処理は使う側には見えません。

より広い用途で使える

暗号化/復号はかなり直球な使い方ですが、ビジネスロジック内の定型処理など
積極的に使おうとするとAccessor/Mutatorに掃き出せるケースがありそうです。

-Laravel
-

Copyright© ikuty.com , 2019 AllRights Reserved Powered by AFFINGER4.