系统模块
Nodesify Admin 包含多个后端模块来处理系统资源和运营。
IAM 模块
角色管理 (/system/roles)
管理定义用户权限的安全角色。
- 接口: 标准 CRUD (
GET,POST,PUT,DELETE)。 - 逻辑:
- 列表: 分页列表,可按名称和状态过滤。
- 权限: 角色关联到
ApiPermission(后端访问)和Menu(前端可见性)。 - 约束:
super和admin是受保护的系统预置角色。
部门管理 (/system/departments)
管理组织架构。
- 结构: 基于树的层级结构(带
pid的邻接表模式)。 - 接口:
GET /system/departments: 返回完整列表(或过滤后的树)。POST,PUT,DELETE: 管理树节点。
- 用途: 用户被分配到部门以反映现实世界的汇报关系。
菜单管理 (/menus)
管理动态的前端菜单结构。
- 动态路由: 前端在运行时获取这些菜单以构建侧边栏。
- 角色关联: 菜单关联到角色。用户只能看到其角色被授权的菜单。
- 属性: 包含
path,component(Vue 文件路径),title,icon, 和order。 - 树形结构: 通过
parentId支持无限嵌套。
API 权限管理 (/system/apis)
控制对后端 API 接口的细粒度访问。
- 注册表: 作为所有受保护后端路由的注册表。
- RBAC 执行:
AuthGuard中间件检查用户角色是否拥有所请求接口所需的特定ApiPermission代码。 - 自动发现: (未来) 可以通过扫描控制器装饰器自动填充。
资源管理
文件上传 (/files)
- 接口:
POST /files/upload - 格式: 期望
multipart/form-data。 - 逻辑: 目前每次请求接受单个文件。文件被存储(根据配置存储在本地或云端),并在数据库中创建元数据记录。
- 响应: 返回包含 ID 和路径的
FileRecord。
数据字典 (/system/dicts)
字典提供了一种集中式方法来管理在整个应用程序中使用的标准选项(例如:“性别”、“订单状态”)。
- 结构: 两级层级。
- 类型: 类别(例如:
sys_user_status)。 - 数据: 关联到类型的实际选项(例如:
活跃、已锁定)。
- 类型: 类别(例如:
- 前端用途: UI 获取这些数据来动态填充 Select/Dropdown 组件。
系统配置 (/system/configs)
管理存储在数据库中的全局系统设置,允许在不部署代码的情况下动态更改行为。
接口
GET /system/configs: 列出所有配置项。POST /system/configs: 创建新配置项(开发/管理员使用)。PUT /system/configs/:key: 更新特定配置的值。DELETE /system/configs/:id: 移除配置项。
关键配置项
系统预置了几个关键配置键。请勿删除这些键,因为后端依赖于它们。
| 键名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
site_title | string | "Nodesify Admin" | 浏览器标签页和登录屏幕上显示的主标题。 |
site_footer | string | "...Nodesify Enterprise..." | 页脚中显示的版权文本。 |
maintenance_mode | boolean | false | 如果设置为 true,则只有超级管理员可以登录。 |
allow_registration | boolean | false | 控制公共注册表单是否可见/活跃。 |
mfa_required_for_admin | boolean | false | 对具有管理角色的用户强制执行 2FA。 |
token_expiry_access | string | "7d" | 访问令牌的有效期(例如:"15m", "7d")。 |
token_expiry_refresh | string | "30d" | 刷新令牌的有效期。 |
password_min_length | number | 6 | 新密码的最小字符要求。 |
upload_max_size | number | 5242880 | 最大文件上传限制(字节,默认 5MB)。 |
upload_allowed_extensions | string | "jpg,png..." | 允许的文件扩展名列表(逗号分隔)。 |
代码使用
后端提供了一个实用工具函数来获取这些值并带有回退默认值:
typescript
import { getSystemConfig } from '~/utils/config';
// 示例:检查是否开启了维护模式
const isMaintenance = await getSystemConfig('maintenance_mode', 'false');
if (isMaintenance === 'true') {
// 阻止访问
}运营管理
登录日志 (/system/login-logs)
专门用于追踪所有认证尝试。
- 目的: 安全监控,以检测暴力破解攻击或未经授权的访问。
- 数据点: 用户名、IP 地址、状态(成功/失败)、消息(例如:“密码错误”)。
- 搜索: 按用户名、状态或日期范围过滤。
审计日志 (/system/operation-logs)
记录系统中的每一个关键操作。
- 范围: 涵盖 HTTP 方法、API 路径、用户、IP 地址和执行时长。
- 搜索: 管理员可以按以下条件过滤日志:
- 用户名(谁做的?)
- 日期范围(何时?)
- 方法/路径(访问了什么?)
- 状态(是否失败?)
系统通知 (/system/notices)
用于向用户广播信息的模块。
- 类型: 信息、警告、错误。
- 可见性: 可以是定向的(逻辑待扩展)或全局的。
- 管理: 管理员可以创建、编辑、发布和撤回通知。