Files
2025-11-18 11:06:24 +08:00

8.3 KiB

API接口速查表

版本: v1.0 日期: 2025-11-17 后端地址: http://172.16.0.55:8073


📌 认证接口

1. 统一登录接口

端点: POST /auth/login

支持两种方式:

OAuth登录

POST /auth/login
Content-Type: application/json

{
  "userInfo": {
    "sub": "user123",          // 必填
    "username": "zhangsan",    // 可选
    "nickname": "张三",        // 可选
    "email": "...",            // 可选
    "phone_number": "...",     // 可选
    "ou_id": "dept001",        // 可选
    "ou_name": "技术部",       // 可选
    "is_leader": false         // 可选
  },
  "expiresIn": 3600,           // 必填
  "area": "梅州"               // 可选,仅首次创建时保存
}

密码登录

POST /auth/login
Content-Type: application/json

{
  "username": "000",    // 实际是sub字段
  "password": "admin06111"
}

成功响应:

{
  "success": true,
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIs...",
    "token_type": "Bearer",
    "expires_in": 3600,
    "user_info": {
      "user_id": "5",
      "username": "admin",
      "nick_name": "管理员",
      "email": null,
      "phone_number": null,
      "ou_id": "default",
      "ou_name": "未分配部门",
      "is_leader": true,
      "user_role": "admin",
      "sub": "000"
    }
  }
}

失败响应:

{
  "success": false,
  "error": "用户名或密码错误"
}

📌 RBAC路由接口

2. 获取用户路由

端点: GET /user/routesGET /rbac/user/routes

请求头:

Authorization: Bearer {JWT_TOKEN}

响应:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "user_id": 6,
    "username": "001",
    "routes": [
      {
        "id": 1,
        "route_path": "/",
        "route_name": "Layout",
        "component": "layout/index",
        "route_title": "入口页",
        "icon": "el-icon-s-home",
        "sort_order": 1,
        "is_hidden": false,
        "is_cache": true,
        "children": [...]
      }
    ]
  }
}

3. 检查路由权限

端点: GET /rbac/check-route

请求参数:

route_path: /system/users

请求头:

Authorization: Bearer {JWT_TOKEN}

响应:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "route_path": "/system/users",
    "has_access": true
  }
}

4. 清除路由缓存

端点: POST /rbac/clear-routes-cache

请求头:

Authorization: Bearer {JWT_TOKEN}

响应:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "message": "路由缓存已清除"
  }
}

📌 PostgREST数据接口

通用规则

所有数据表访问格式:

GET    /{table_name}              # 查询
POST   /{table_name}              # 创建
PATCH  /{table_name}?{filter}     # 更新
DELETE /{table_name}?{filter}     # 删除

请求头:

Authorization: Bearer {JWT_TOKEN}
Content-Type: application/json

PostgREST过滤操作符

操作符 说明 示例
eq 等于 id=eq.5
neq 不等于 status=neq.1
gt 大于 id=gt.10
gte 大于等于 id=gte.10
lt 小于 id=lt.100
lte 小于等于 id=lte.100
like 模糊匹配 title=like.*合同*
ilike 不区分大小写模糊匹配 title=ilike.*word*
in 在列表中 id=in.(1,2,3)
is 是NULL deleted_at=is.null
not.is 不是NULL deleted_at=not.is.null

查询参数

参数 说明 示例
select 选择字段 select=id,title,created_at
order 排序 order=created_at.desc
limit 限制数量 limit=20
offset 偏移量 offset=40

📌 常用数据表

documents(文档表)

查询文档列表:

GET /documents?user_id=eq.5&status=eq.0&select=id,title,created_at&order=created_at.desc&limit=20&offset=0

创建文档:

POST /documents
Content-Type: application/json

{
  "title": "测试文档",
  "user_id": 5,
  "status": 0
}

更新文档:

PATCH /documents?id=eq.123
Content-Type: application/json

{
  "title": "新标题",
  "status": 1
}

删除文档:

DELETE /documents?id=eq.123

sso_users(用户表)

查询用户:

GET /sso_users?sub=eq.000&select=id,username,nick_name,email

注意: 普通用户无法直接访问 sso_users 表,需要通过特殊接口。

roles(角色表)

查询所有角色:

GET /roles?is_system_role=eq.true&select=id,role_key,role_name,priority&order=priority.desc

user_role(用户-角色关联表)

查询用户角色:

GET /user_role?user_id=eq.5&select=role_id

sys_routes(路由表)

查询所有路由:

GET /sys_routes?status=eq.0&deleted_at=is.null&select=id,route_path,route_title&order=sort_order

role_route(角色-路由关联表)

查询角色路由:

GET /role_route?role_id=eq.1&select=route_id

📌 完整示例

登录 + 获取路由 + 查询数据

import axios from 'axios';

const API_BASE = 'http://172.16.0.55:8073';

// 1. 登录
const login = async () => {
  const response = await axios.post(`${API_BASE}/auth/login`, {
    username: '001',
    password: 'gdyc06111'
  });

  const { access_token, user_info } = response.data.data;
  localStorage.setItem('token', access_token);

  return { token: access_token, userInfo: user_info };
};

// 2. 获取路由
const fetchRoutes = async (token: string) => {
  const response = await axios.get(`${API_BASE}/user/routes`, {
    headers: { 'Authorization': `Bearer ${token}` }
  });

  return response.data.data.routes;
};

// 3. 查询文档(普通用户)
const fetchDocuments = async (token: string, userId: string) => {
  const response = await axios.get(`${API_BASE}/documents`, {
    params: {
      user_id: `eq.${userId}`,  // 只查自己的数据
      status: `eq.0`,
      select: 'id,title,created_at',
      order: 'created_at.desc',
      limit: 20,
      offset: 0
    },
    headers: { 'Authorization': `Bearer ${token}` }
  });

  return response.data;
};

// 4. 创建文档
const createDocument = async (token: string, userId: string) => {
  const response = await axios.post(`${API_BASE}/documents`, {
    title: '测试文档',
    user_id: parseInt(userId),
    status: 0
  }, {
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    }
  });

  return response.data;
};

// 使用示例
const main = async () => {
  // 登录
  const { token, userInfo } = await login();
  console.log('登录成功:', userInfo);

  // 获取路由
  const routes = await fetchRoutes(token);
  console.log('用户路由:', routes);

  // 查询文档
  const docs = await fetchDocuments(token, userInfo.user_id);
  console.log('文档列表:', docs);

  // 创建文档
  const newDoc = await createDocument(token, userInfo.user_id);
  console.log('新建文档:', newDoc);
};

main();

📌 错误码对照表

HTTP状态码 说明 处理方式
200 成功 正常处理
400 请求参数错误 检查请求参数
401 未授权/Token过期 重新登录
403 无权限访问 提示用户无权限
404 资源不存在 检查路径是否正确
500 服务器错误 联系后端开发人员

📌 测试账号

用户名 密码 角色 路由数 说明
000 admin06111 超级管理员 29 所有权限
001 gdyc06111 普通用户 19 有限权限
jy001 jyyc0814 系统管理员 29 管理员权限
mz001 mzyc06111 系统管理员 29 管理员权限
yf001 yfyc06111 系统管理员 29 管理员权限
cz001 czyc06111 系统管理员 29 管理员权限

📌 快速链接

  • 完整对接文档: docs/RBAC/前端完整对接文档_RBAC与PostgREST.md
  • 快速开始: docs/RBAC/前端快速开始_5分钟集成.md
  • 用户管理: docs/RBAC/用户管理完整指南.md
  • RBAC总结: docs/RBAC/RBAC系统使用总结.md

创建时间: 2025-11-17 维护者: Claude Code