Aptli

系统设置

系统设置控制应用程序范围内的行为、安全参数和部署配置。本节涵盖安全架构、应用程序配置以及替代部署模型。

安全架构

Aptli采用四层安全模型,强制实施服务器端渲染(SSR):

第一层:身份验证您是谁 - 在访问前验证用户身份。- 基于密码的登录(含复杂度要求)- OAuth提供商(GitHub、Google)- 双因素认证(TOTP)- 需邮箱验证- 带过期机制的会话管理- 连续登录失败后强制锁定

第二层:管理员权限(开放式)可修改内容:- 显式权限授予- 按模型创建/更新/删除权限- 超级权限:appSettingSchemasModifyadminRightsModifyviewDeleted- 作用域限定为操作(可创建但不可删除)- 默认:仅查看权限

第三层:角色限制(限制性)您无法查看的内容:- 字段级数据过滤器- 模型 + 字段 + 比较 + 值过滤器- 在数据库查询前于服务器端应用- 无法通过API调用、导出或截图绕过- 多重限制组合(AND逻辑)

第四层:API层强制服务器端渲染(SSR)- 未授权用户确实无法访问数据- 所有查询均在服务器端过滤(Nuxt服务器API)- 角色限制在MongoDB查询前生效- 无客户端过滤(无法绕过)- API对未授权记录返回404(即使攻击者知晓ID)

SSR为何重要:- **客户端过滤:**数据发送至浏览器后,通过JavaScript隐藏(可通过开发工具绕过)- **服务器端过滤:**数据绝不发送给未经授权的用户(安全可靠)

Aptli采用服务器端渲染(SSR)技术——未经授权的数据永远不会到达客户端。

应用程序设置

应用设置页面展示配置选项与安全参数

所需权限: appSettingSchemasModify 管理员权限

导航至:管理员 → 应用设置

身份验证设置

允许的域名:- 可注册账户的电子邮件域名列表- 示例:["company.com", "contractor.com"]- 仅允许来自这些域名的电子邮件注册- 默认值:您的部署域名

允许注册:- true - 用户可自行注册(需域名匹配)- false - 管理员必须手动创建账户- 默认值:false(受控访问)

可用登录方式:- 用户名/密码(复选框)- GitHub OAuth(复选框)- Google OAuth(复选框)- 至少需启用一种登录方式- 默认设置:仅限用户名/密码登录

要求启用双因素认证:- true - 所有用户必须启用双因素认证(可配置宽限期)- false - 双因素认证可选- 默认值:false

会话安全

最大登录尝试次数:- 硬锁定前的失败登录次数- 有效范围:3-10次尝试- 默认值:5

自动注销时间:- 闲置超时时间(秒)- 读写数据将重置倒计时- 有效范围:1小时 - 7天- 默认值:86400(1天)

CSRF 令牌过期设置:- 服务器会话超时时间(分钟)- 强制重新登录(无论是否活跃)- 有效范围:1 小时 - 4 周- 默认值:10080(1 周)

会话过期:- 绝对最大会话时长- 单设备用户与CSRF令牌同步- 多设备用户可能存在不同过期时间- 默认值:10080分钟(1周)

数据保留

软删除保留期:- 软删除记录在数据库中的保留时长- 选项:30天、90天、1年、无限期- 默认值:90天- 适用对象:任务、报告、用户、功能(当设置deletedAt时)

版本压缩计划:- 压缩旧功能版本的频率- 选项:每周、每月、每季度- 默认值:每月- 压缩后的版本仍可还原(无损压缩)

交易记录:- 库存交易永不删除(不可篡改的审计轨迹)- 可归档至独立数据库(高级配置)

新用户默认设置

新用户角色:- 自动分配的角色ID数组- 空数组表示无自动限制- 默认值:[](管理员手动分配)

新用户管理员权限:- 对象权限授予- 空对象 = 仅查看权限- 默认值:{}(无写入权限)

示例配置:

现场工作人员默认设置:json { "roles": ["field_worker_role_id"], "adminRights": { "reportsCreate": true }}

办公室协调员默认设置:json { "roles": [], "adminRights": { "assignmentsCreate": true, "ordersCreate": true, "stockItemsView": true }}

自托管部署

Aptli支持自托管部署(需在自托管模式下获取许可证)。

部署模式

SaaS 模式(默认): bash NUXT_REQUIRE_LICENSE=false - 无需许可证验证 - Aptli 管理基础设施 - 自动更新 - 包含专业支持

自主托管模式:bash NUXT_REQUIRE_LICENSE=true NUXT_LICENSE_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----..."- 需进行许可证验证- 客户自行管理基础设施- 手动更新(替换.output文件夹)- 需获取Aptli提供的许可证密钥

许可系统

**工作原理:**1. 将 .output/ 文件夹部署至服务器2. 服务器生成唯一部署ID(硬件指纹 + 主机名)3. 自动启动30天试用期4. 将部署ID发送至 [email protected] 5. Aptli生成包含授权部署ID的JWT许可证 6. 通过/admin/license页面或NUXT_LICENSE_KEY环境变量激活

多部署:- 每台服务器拥有唯一的部署ID- 许可证列出所有授权部署ID- 无法在未获取新许可证的情况下克隆服务器- 防止未经授权的分发

许可证验证:- 服务器启动时检查- 许可证无效 = 应用程序无法启动- 试用期到期 = 7天内显示警告,之后阻止运行- 通过电子邮件续订许可证

环境变量(自托管)

必填: bash NUXT_MONGODB_URI=mongodb://localhost:27017/aptli NUXT_SESSION_PASSWORD=min-32-char-random-string

可选 - OAuth:bash NUXT_OAUTH_GITHUB_CLIENT_ID=... NUXT_OAUTH_GITHUB_CLIENT_SECRET=... NUXT_OAUTH_GOOGLE_CLIENT_ID=... NUXT_OAUTH_GOOGLE_CLIENT_SECRET=...

可选 - 电子邮件:bash NUXT_RESEND_API_KEY=... [email protected]

可选 - 文件扫描: bash NUXT_ENABLE_FILE_SCAN=true NUXT_CLAMAV_HOST=localhost NUXT_CLAMAV_PORT=3310

可选 - 许可证: bash NUXT_REQUIRE_LICENSE=true NUXT_LICENSE_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----..." NUXT_LICENSE_KEY=eyJhbGc... (auto-activate)

基础设施要求

最低要求:- 2 个 CPU 核心- 4GB 内存- 20GB 存储空间(随数据增长)- MongoDB 5.0 及以上版本- Node.js 20 及以上版本

推荐配置:- 4个CPU核心- 8GB内存- 100GB固态硬盘存储- MongoDB副本集(高可用性)- 负载均衡器(水平扩展)

可选服务:- ClamAV守护进程(文件扫描)- Redis(会话缓存——性能提升)- SMTP服务器(邮件通知)

部署步骤

  1. 构建应用程序:bash npm run build
  2. 输出内容: bash scp -r .output/ user@server:/aptli/
  3. 设置环境变量:/aptli/.env 中创建所需变量
  4. 启动服务器:bashcd /aptli/.outputnode server/index.mjs
  5. 激活许可证:- 访问 https://your-domain/admin/license- 复制部署ID- 发送邮件至 [email protected] 粘贴收到的许可证密钥- 点击"激活"
  6. 配置反向代理: Nginx/Apache 将端口 3000 代理转发至 HTTPS
  7. **配置进程管理器:**使用 PM2 或 systemd 确保服务器持续运行

更新(自托管)

手动更新流程:1. 备份数据库:mongodump 2. 备份 .env 文件 3. 从 Aptli 下载新的 .output/ 文件夹 4. 停止服务器:pm2 stop aptli 5. 替换 .output/ 文件夹 6. 恢复 .env 文件 7. 启动服务器:pm2 start aptli 8. 验证:检查 /admin/license 中的版本信息

Aptli 提供:- 包含重大变更的版本说明- 迁移脚本(若涉及数据库变更)- 回滚操作指南- 更新过程中的专业支持

安全最佳实践

SSL/TLS 要求:- 生产环境使用 HTTPS(而非 HTTP)- 免费证书:Let's Encrypt- 拒绝 HTTP 连接(重定向至 HTTPS)

防火墙配置:- 允许:HTTPS(443)、SSH(22)- 拒绝:来自公共互联网的MongoDB端口(27017)- 限制:管理页面仅限VPN或IP白名单访问

会话安全:- NUXT_SESSION_PASSWORD - 至少32个随机字符- 每季度轮换会话密码- 高安全环境下采用短会话时限

数据库安全:- 启用MongoDB身份验证- 独立用户凭证(非root用户)- 加密连接(MongoDB TLS)- 定期备份(自动化,已测试恢复功能)

OAuth 密钥管理要点:- 存储于环境变量(而非代码中)- 每季度轮换密钥- 撤销未使用的 OAuth 应用

文件上传安全:- 生产环境启用ClamAV扫描- 强制执行文件大小限制- 限制允许的文件类型- 可疑文件存储隔离

监控:- 登录失败尝试(检测暴力破解)- 授权失败(检测未经授权的访问尝试)- 异常的API使用模式- 数据库连接失败

合规考量

数据驻留: 自托管模式可控制数据位置:- 在特定地理区域托管- 满足法规要求(GDPR、HIPAA等)- 物理控制数据访问

**审计日志:**Aptli为以下操作维护审计日志:- 身份验证尝试(成功/失败)- 管理权限使用(谁修改了什么)- 角色限制变更- 交易记录(库存变动)- 版本历史记录(功能变更)- 软删除(谁在何时删除了什么)

**数据导出:**所有数据均可导出以满足合规要求:- 非地理数据支持CSV格式导出- 地理特征支持GeoJSON格式导出(通过地图工具栏中的"数据传输"按钮操作)- 交易报告(库存审计)- 用户访问日志

**数据保留:**可配置的保留策略:- 软删除保留期- 版本压缩(无损)- 交易记录(不可变 - 永不删除)- 审计日志(可配置归档)