Files
xk-api-yii/common/core/BaseActiveRecord.php

63 lines
2.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace common\core;
use common\services\DataEncryptor;
use Yii;
use yii\base\Exception;
use yii\db\ActiveRecord;
/**
* 对框架的AR的扩展所有前台/后台数据模型都继承自该类
*/
class BaseActiveRecord extends ActiveRecord
{
public function saveOrFail($runValidation = true, $attributeNames = null){
if(!$this->save($runValidation, $attributeNames)){
throw new Exception(implode(',',$this->getFirstErrors()));
}
return true;
}
/**
* 新增和编辑数据的时候
* @param $insert
* @throws \Exception
*/
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
// 加密ID卡信息之前检查是否已经加密过
if (!empty($this->idcard) && !$this->is_encrypted($this->idcard)) {
$this->idcard = (new DataEncryptor(\Yii::$app->params['ase_key']))->encrypt($this->idcard);
}
// 加密ID卡信息之前检查是否已经加密过
if (!empty($this->id_card) && !$this->is_encrypted($this->id_card)) {
$this->id_card = (new DataEncryptor(\Yii::$app->params['ase_key']))->encrypt($this->id_card);
}
return true;
}
return false;
}
public function afterFind()
{
parent::afterFind();
// 解密ID卡信息之前检查是否已经是明文
if (!empty($this->id_card) && $this->is_encrypted($this->id_card)) {
$this->id_card = (new DataEncryptor(Yii::$app->params['ase_key']))->decrypt($this->id_card);
}
if (!empty($this->idcard) && $this->is_encrypted($this->idcard)) {
$this->idcard = (new DataEncryptor(Yii::$app->params['ase_key']))->decrypt($this->idcard);
}
}
private function is_encrypted($data): bool
{
if (!is_string($data)) {
return false;
}
// 这里应该有逻辑来判断$data是否已经被加密。未加密是true
return strpos($data, 'xk_ase_256_') === 0;
}
}