magros/laravel-model-encryption
A trait to encrypt data models in Laravel, this automatically encrypt and decrypt model data overriding getAttribute an setAttribute methods of Eloquent Model.
Run composer installation
composer require magros/laravel-model-encryption
Add ServiceProvider to your app/config.php file
'providers' => [
...
\Magros\Encryptable\EncryptServiceProvider::class,
],
Publish configuration file, this will create config/encrypt.php
php artisan vendor:publish --provider=Magros\Encryptable\EncryptServiceProvider
You must add ENCRYPT_KEY and ENCRYPT_PREFIX in your .env file or set it in your config/encrypt.php file
Use the Magros\Encryptable\Encryptable trait:
use Magros\Encryptable\Encryptable;
Set the $encryptable array on your Model.
protected $encryptable = ['encrypted_property'];
Here's a complete example:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Magros\Encryptable\Encryptable;
class User extends Model
{
use Encryptable;
/**
* The attributes that should be encrypted when stored.
*
* @var array
*/
protected $encryptable = [ 'email', 'address' , 'name'];
/**
* Optionally you can define the attributes that should be converted to camelcase when retrieve.
*
* @var array
*/
protected $camelcase = ['name'];
}
Optional. Encrypt your current data
If you have current data in your database you can encrypt it with the: php artisan encryptable:encryptModel 'App\User' command.
Additionally you can decrypt it using the:php artisan encryptable:decryptModel 'App\User' command.
Note: You must implement first the Encryptable trait and set $encryptable attributes
If you are using exists and unique rules with encrypted values replace it with exists_encrypted and unique_encrypted
$validator = validator(['email'=>'foo@bar.com'], ['email'=>'exists_encrypted:users,email']);
You can still use where functions
$validator = User::where('email','foo@bar.com')->first();
Automatically foo@bar.com will be encrypted and pass it to the query builder.
How can I help you explore Laravel packages today?