官方能否引入IlluminateEncryptionEncrypter组件,或者指定一个注入位置

aphper

Eloquent自带了一个转换器encrypted

class UserIdentity extends Model
{
    protected $table = 'users_identity';

    protected function casts(): array
    {
        return [
            'real_name'  => 'encrypted',
            'id_card_number'  => 'encrypted',
        ];
    }

}

可以用于数据入出库自动加解密,身份证、手机号等隐私信息在laravel中我都这样储存,即使被脱裤也能很好保证用户信息安全。

在webman中我没有只能在app\functions.php文件中这样做

use support\Model;
use Illuminate\Encryption\Encrypter;

// 生成Encrypter给Model
$key = base64_decode('AZ1qOTeasS9gvas8gCVDRFmhZ1ngx+x6qXR1QSyUZ4Y='); 
$enc = new Encrypter($key, 'aes-256-cbc');
Model::encryptUsing($enc);

写在functions.php中是因为这玩意只需要注入baseModel一次,webman的生命周期,我实在找不到第二个合适的位置

希望@walkor大哥评估下这玩意有没有必要嵌入webman/database,顺便把key和cipher配置常态化,官方写入config中。

另外加解密是很重要常用的东西,除了model也会有其他加密需求,而且一个项目使用大多数情况同一个key足以,illuminate/encryption也完全满足大多数需求,没必要让webman用户每次调用加解密都手动调用一次该类或自己手动实现一个加解密,Yii和laravel都是内置了该功能,请@walkor大哥评估下有没有必要把这东西做成webman基础的组件,从config自动读取配置,每次直接调用单例即可

257 3 1
3个回答

小天天天天

字段值加密非常常用,我现在的实现方式是:

 // 加密字段
    protected $encryptable = [
        'email',
        'phone',
        'company',
        'title',
        'content',
    ];

    // 修改器:在保存数据时加密
    public function setAttribute($key, $value)
    {
        if (in_array($key, $this->encryptable)) {
            $value = Crypt::encrypt($value);
        }

        return parent::setAttribute($key, $value);
    }

    // 访问器:在获取数据时解密
    public function getAttribute($key)
    {
        $value = parent::getAttribute($key);

        if (in_array($key, $this->encryptable) && !is_null($value)) {
            $value = Crypt::decrypt($value);
        }

        return $value;
    }

感觉不太优雅,期望有一个更好的方案

  • 暂无评论
nitron

webman支持两种ORM,THink和Eloquent, 如果用的EloquentORM的自行composer require就可以了,直接使用

THinkORM大概要自行适配

  • 暂无评论
aphper

@walkor 老公你说话啊

×
🔝