Skip to content

系统内置配置

系统配置模块(system_configs 表)用于在运行时动态调整系统行为,无需修改代码或环境变量。管理员可通过后台管理界面随时读写配置项。


内置配置项参考

以下是系统预置的 16 个配置项(由 db:seed 初始化,源文件:packages/shared/src/seed-data.ts)。


站点基础

site_name

属性
类型string
默认值Zenith Admin
说明站点名称,显示在浏览器标签页标题中。前端通过 GET /api/system-configs/public 读取并更新页面 <title>

登录与账号安全

captcha_enabled

属性
类型boolean
默认值false
说明是否开启登录验证码。设为 true 后,登录页会显示图形验证码输入框,后端会校验验证码正确性。

login_max_attempts

属性
类型number
默认值10
说明登录失败允许的最大次数。连续失败达到此阈值后,账号将被自动锁定(锁定时长由 login_lock_duration_minutes 控制)。失败计数使用 Redis 持久化,服务重启后不重置。

login_lock_duration_minutes

属性
类型number
默认值30
说明账号锁定的持续时长,单位:分钟。锁定期间用户无法登录,到期后自动解除。管理员也可通过「用户管理 → 解除锁定」手动提前解锁。

allow_registration

属性
类型boolean
默认值false
说明是否允许新用户在登录页自助注册账号。关闭时注册入口隐藏,只有管理员可在后台创建用户。

forgot_password_enabled

属性
类型boolean
默认值false
说明是否开启忘记密码功能。开启后登录页显示「忘记密码」链接,用户可通过邮件接收重置链接。依赖邮件配置(系统设置 → 邮件配置)正常可用。

密码策略

user_default_password

属性
类型string
默认值123456
说明新增用户时系统自动设置的初始密码。后端在创建用户时读取此配置,经 bcrypt 加密后存入数据库。建议在生产环境修改为高强度密码。

password_min_length

属性
类型number
默认值6
说明密码的最小长度限制。修改密码或重置密码时,前后端均会校验此规则。

password_require_uppercase

属性
类型boolean
默认值false
说明密码是否必须包含至少一个大写字母(A–Z)。

password_require_special_char

属性
类型boolean
默认值false
说明密码是否必须包含至少一个特殊字符(如 !@#$%^&*)。

password_expiry_enabled

属性
类型boolean
默认值false
说明是否开启密码过期强制重置。开启后,当用户密码超过 password_expiry_days 天未修改,登录时会被强制跳转至修改密码页。

password_expiry_days

属性
类型number
默认值90
说明密码有效期(天)。仅在 password_expiry_enabledtrue 时生效。

页面水印

watermark_enabled

属性
类型boolean
默认值false
说明是否开启页面水印。开启后,所有后台页面(AdminLayout 内)均会显示水印层,用于防截图泄漏。水印层通过 pointer-events: none 实现,不影响正常交互。

watermark_content

属性
类型string
默认值(空)
说明水印显示的文本内容。留空时自动回退为当前登录用户的昵称(nickname)或账号(username),推荐留空以实现可追溯的个性化水印。

watermark_font_size

属性
类型number
默认值14
说明水印文字的字体大小,单位 px。

watermark_opacity

属性
类型number
默认值15
说明水印透明度,取值范围 1–100,实际 CSS opacity = 值 ÷ 100。默认 15 对应 opacity: 0.15,视觉上若隐若现不影响内容阅读。

如何在代码中读取配置

后端路由/服务层中通过项目封装的专用 helper 读取配置项,无需手写 Drizzle 查询:

typescript
import { getConfigValue, getConfigBoolean, getConfigNumber } from '../lib/system-config';

// string 配置
const siteName = await getConfigValue('site_name', 'Zenith Admin');
// boolean 配置
const watermarkEnabled = await getConfigBoolean('watermark_enabled', false);
// number 配置
const maxAttempts = await getConfigNumber('login_max_attempts', 10);

三个 helper 均位于 packages/server/src/lib/system-config.ts,签名:

Helper返回类型说明
getConfigValue(key, defaultValue, tenantId?)Promise<string>原始字符串值,不存在时返回 defaultValue
getConfigBoolean(key, defaultValue, tenantId?)Promise<boolean>自动将 'true' 转为 true
getConfigNumber(key, defaultValue, tenantId?)Promise<number>自动 Number() 转换,转换失败时返回 defaultValue

注意:所有 helper 均支持可选的 tenantId 参数,用于多租户场景。单租户场景省略即可。


如何新增内置配置

  1. packages/shared/src/seed-data.tsSEED_SYSTEM_CONFIGS 数组中追加记录:
typescript
{ id: 17, configKey: 'your_key', configValue: 'default', configType: 'string', description: '配置项说明', createdAt: SEED_DATE, updatedAt: SEED_DATE },
  1. 在后端需要读取该配置的路由/中间件中调用 getConfigValue('your_key')

  2. 重新执行 npm run db:seed(种子写入已做幂等处理,仅插入缺失 key,不会覆盖已有值)。

注意id 字段需全局唯一,沿用已有最大值 +1 递增。

Built with VitePress for local documentation preview.