Go to file
Tsuki 878189e191
Some checks are pending
Docker Build and Push / build (push) Waiting to run
fix migrations
2025-08-17 19:07:36 +08:00
.github/workflows sync 2025-08-17 18:40:47 +08:00
.sqlx add more sqlx 2025-08-17 18:57:02 +08:00
docs sync: add settings 2025-08-11 00:05:52 +08:00
migrations refactor 2025-08-14 21:34:27 +08:00
src sync 2025-08-17 18:40:47 +08:00
.gitignore sync 2025-08-17 18:40:47 +08:00
Cargo.lock check paras 2025-08-15 22:32:07 +08:00
Cargo.toml check paras 2025-08-15 22:32:07 +08:00
CLAUDE.md sync 2025-08-17 18:40:47 +08:00
Dockerfile fix migrations 2025-08-17 19:07:36 +08:00
README.md add casbin 2025-08-11 21:26:29 +08:00
test_blog add blog system 2025-08-12 21:25:17 +08:00

Map Application Server (MAPP)

一个基于 GraphQL 的现代地图应用服务器,支持实时数据同步、权限管理和多租户架构。

功能特性

  • 🗺️ 基于 GraphQL 的地图数据服务
  • 🔐 基于 Casbin 的 RBAC 权限管理
  • 📡 Kafka 消息队列集成
  • 🗄️ PostgreSQL 数据库支持
  • 🚀 高性能异步架构
  • 🔧 完整的 CLI 管理工具

快速开始

环境要求

  • Rust 1.70+
  • PostgreSQL 12+
  • Kafka 2.8+ (可选)

安装

# 克隆项目
git clone <repository-url>
cd mapp

# 安装依赖
cargo build --release

# 设置环境变量
export DATABASE_URL="postgresql://username:password@localhost/mapp"
export JWT_SECRET="your-secret-key"
export PORT=3000

运行

# 启动服务器
./target/release/mapp serve

# 开发模式
./target/release/mapp serve --dev --verbose

# 运行数据库迁移
./target/release/mapp migrate

权限管理 CLI

MAPP 提供了完整的命令行权限管理工具,基于 Casbin RBAC 模型:

基本用法

# 查看权限管理帮助
./target/release/mapp permissions --help

# 列出所有权限策略
./target/release/mapp permissions list

# 重新加载权限策略
./target/release/mapp permissions reload

权限策略管理

# 添加权限策略:给 admin 角色添加删除用户的权限
./target/release/mapp permissions add --role admin --resource users --action delete

# 移除权限策略:移除 admin 角色的删除用户权限
./target/release/mapp permissions remove --role admin --resource users --action delete

# 查看角色权限
./target/release/mapp permissions list-role-permissions --role admin

用户角色管理

# 为用户分配角色
./target/release/mapp permissions assign-role --user-id user123 --role editor

# 移除用户角色
./target/release/mapp permissions remove-role --user-id user123 --role editor

# 查看用户角色
./target/release/mapp permissions list-user-roles --user-id user123

权限检查

# 检查用户是否有特定权限
./target/release/mapp permissions check --user-id user123 --resource pages --action write

常用权限配置示例

# 创建管理员角色权限
./target/release/mapp permissions add --role admin --resource "*" --action "*"

# 创建编辑者角色权限
./target/release/mapp permissions add --role editor --resource pages --action read
./target/release/mapp permissions add --role editor --resource pages --action write
./target/release/mapp permissions add --role editor --resource page_blocks --action read
./target/release/mapp permissions add --role editor --resource page_blocks --action write

# 创建查看者角色权限
./target/release/mapp permissions add --role viewer --resource pages --action read
./target/release/mapp permissions add --role viewer --resource page_blocks --action read

# 为用户分配角色
./target/release/mapp permissions assign-role --user-id admin@example.com --role admin
./target/release/mapp permissions assign-role --user-id editor@example.com --role editor
./target/release/mapp permissions assign-role --user-id viewer@example.com --role viewer

配置说明

环境变量

变量名 描述 默认值
DATABASE_URL PostgreSQL 连接字符串 必需
JWT_SECRET JWT 签名密钥 必需
PORT 服务器端口 3000
TILE_SERVER 瓦片服务器 URL 必需
KAFKA_BROKERS Kafka 集群地址 localhost:9092
KAFKA_TOPIC Kafka 主题 mapp-events
KAFKA_GROUP_ID Kafka 消费者组 mapp-group

数据库迁移

# 运行所有迁移
./target/release/mapp migrate

# 查看迁移状态
./target/release/mapp migrate --dry-run

# 强制重新运行迁移
./target/release/mapp migrate --force

开发

项目结构

src/
├── app.rs              # 应用路由配置
├── auth.rs             # 认证和授权
├── cli.rs              # 命令行接口
├── config.rs           # 配置管理
├── db.rs               # 数据库连接
├── graphql/            # GraphQL 相关
│   ├── guards.rs       # 权限守卫
│   ├── mutation.rs     # 变更操作
│   ├── query.rs        # 查询操作
│   └── types.rs        # 类型定义
├── listener/           # 消息监听器
├── models/             # 数据模型
└── services/           # 业务服务
    └── casbin_service.rs # 权限管理服务

构建

# 开发构建
cargo build

# 发布构建
cargo build --release

# 运行测试
cargo test

# 代码检查
cargo clippy

许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。

贡献

欢迎提交 Issue 和 Pull Request

支持

如有问题,请通过以下方式联系: