'integer', 'update_time' => 'integer', 'ip_white' => 'json', ]; /** * 获取 IP 白名单,统一返回字符串数组格式 * 兼容:["127.0.0.1"]、[{"value":"127.0.0.1"}]、[{"127.0.0.1":""}] */ public function getipWhiteAttr($value): array { $arr = is_array($value) ? $value : (!$value ? [] : json_decode($value, true)); if (!is_array($arr)) { return []; } $result = []; foreach ($arr as $item) { if (is_string($item)) { $result[] = $item; } elseif (is_array($item)) { if (isset($item['value'])) { $result[] = $item['value']; } else { $key = array_key_first($item); if ($key !== null && $key !== '') { $result[] = $key; } } } } return array_values(array_filter($result)); } /** * 写入 IP 白名单,存储格式 ["127.0.0.1","192.168.1.1"] */ public function setipWhiteAttr($value): array { $arr = is_array($value) ? $value : []; $result = []; foreach ($arr as $ip) { $ip = is_string($ip) ? trim($ip) : ''; if ($ip !== '') { $result[] = $ip; } } return array_values($result); } /** * 创建时自动生成密钥:strtoupper(md5(name+id)) */ protected static function onAfterInsert($model): void { $pk = $model->getPk(); $secret = strtoupper(md5($model->name . $model->$pk)); $model->where($pk, $model->$pk)->update(['secret' => $secret]); } public function admin(): \think\model\relation\BelongsTo { return $this->belongsTo(\app\admin\model\Admin::class, 'admin_id', 'id'); } }