- 修复所有 site_id 默认值 0 的安全漏洞,强制从认证载荷获取 - 统一响应格式,移除手动包装,交由全局拦截器处理 - 为所有管理端控制器添加 @Roles 注解进行权限控制 - 移除 PayTemplate 相关代码,对齐 PHP 数据库结构 - 修复依赖注入和模块导入问题 - 解决路由冲突和编译错误 - 完善实体定义和字段对齐 安全修复: - 修复 412 个文件中的 site_id 默认值问题 - 统一 33 个文件的响应格式 - 添加所有管理端控制器的角色权限控制 技术改进: - 解决 TypeScript 编译错误 - 修复 NestJS 依赖注入问题 - 统一代码规范和最佳实践 - 与 PHP 业务逻辑 100% 对齐
74 lines
1.9 KiB
TypeScript
74 lines
1.9 KiB
TypeScript
import { ApiProperty } from '@nestjs/swagger';
|
|
import { IsOptional, IsNumber, IsString } from 'class-validator';
|
|
|
|
export class LoginConfigDto {
|
|
@ApiProperty({ description: '是否启用验证码', required: false })
|
|
@IsOptional()
|
|
@IsNumber()
|
|
isCaptcha?: number;
|
|
|
|
@ApiProperty({ description: '是否启用站点验证码', required: false })
|
|
@IsOptional()
|
|
@IsNumber()
|
|
isSiteCaptcha?: number;
|
|
|
|
@ApiProperty({ description: '登录背景图', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
bg?: string;
|
|
|
|
@ApiProperty({ description: '站点登录背景图', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
siteBg?: string;
|
|
|
|
@ApiProperty({ description: '登录方式配置', required: false })
|
|
@IsOptional()
|
|
loginMethods?: {
|
|
username?: boolean;
|
|
email?: boolean;
|
|
mobile?: boolean;
|
|
wechat?: boolean;
|
|
qq?: boolean;
|
|
};
|
|
|
|
@ApiProperty({ description: '密码策略配置', required: false })
|
|
@IsOptional()
|
|
passwordPolicy?: {
|
|
minLength?: number;
|
|
requireSpecialChar?: boolean;
|
|
requireNumber?: boolean;
|
|
requireUppercase?: boolean;
|
|
};
|
|
|
|
@ApiProperty({ description: '登录失败限制', required: false })
|
|
@IsOptional()
|
|
loginLimit?: {
|
|
maxAttempts?: number;
|
|
lockoutDuration?: number;
|
|
lockoutType?: string;
|
|
};
|
|
|
|
// PHP 特有字段
|
|
@ApiProperty({ description: '是否启用授权注册', required: false })
|
|
@IsOptional()
|
|
isAuthRegister?: boolean;
|
|
|
|
@ApiProperty({ description: '是否强制获取用户信息', required: false })
|
|
@IsOptional()
|
|
isForceAccessUserInfo?: boolean;
|
|
|
|
@ApiProperty({ description: '是否绑定手机号', required: false })
|
|
@IsOptional()
|
|
isBindMobile?: boolean;
|
|
|
|
@ApiProperty({ description: '是否显示协议', required: false })
|
|
@IsOptional()
|
|
agreementShow?: boolean;
|
|
|
|
@ApiProperty({ description: '描述信息', required: false })
|
|
@IsOptional()
|
|
@IsString()
|
|
desc?: string;
|
|
}
|