Files
wwjcloud-nest-v1/wwjcloud/src/common/auth/dto/admin/LoginConfigDto.ts
万物街 01ed1735df feat: 全面修复安全漏洞和代码规范问题
- 修复所有 site_id 默认值 0 的安全漏洞,强制从认证载荷获取
- 统一响应格式,移除手动包装,交由全局拦截器处理
- 为所有管理端控制器添加 @Roles 注解进行权限控制
- 移除 PayTemplate 相关代码,对齐 PHP 数据库结构
- 修复依赖注入和模块导入问题
- 解决路由冲突和编译错误
- 完善实体定义和字段对齐

安全修复:
- 修复 412 个文件中的 site_id 默认值问题
- 统一 33 个文件的响应格式
- 添加所有管理端控制器的角色权限控制

技术改进:
- 解决 TypeScript 编译错误
- 修复 NestJS 依赖注入问题
- 统一代码规范和最佳实践
- 与 PHP 业务逻辑 100% 对齐
2025-09-13 08:35:59 +08:00

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;
}