201 lines
4.8 KiB
Markdown
201 lines
4.8 KiB
Markdown
# Map Application Server (MAPP)
|
||
|
||
一个基于 GraphQL 的现代地图应用服务器,支持实时数据同步、权限管理和多租户架构。
|
||
|
||
## 功能特性
|
||
|
||
- 🗺️ 基于 GraphQL 的地图数据服务
|
||
- 🔐 基于 Casbin 的 RBAC 权限管理
|
||
- 📡 Kafka 消息队列集成
|
||
- 🗄️ PostgreSQL 数据库支持
|
||
- 🚀 高性能异步架构
|
||
- 🔧 完整的 CLI 管理工具
|
||
|
||
## 快速开始
|
||
|
||
### 环境要求
|
||
|
||
- Rust 1.70+
|
||
- PostgreSQL 12+
|
||
- Kafka 2.8+ (可选)
|
||
|
||
### 安装
|
||
|
||
```bash
|
||
# 克隆项目
|
||
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
|
||
```
|
||
|
||
### 运行
|
||
|
||
```bash
|
||
# 启动服务器
|
||
./target/release/mapp serve
|
||
|
||
# 开发模式
|
||
./target/release/mapp serve --dev --verbose
|
||
|
||
# 运行数据库迁移
|
||
./target/release/mapp migrate
|
||
```
|
||
|
||
## 权限管理 CLI
|
||
|
||
MAPP 提供了完整的命令行权限管理工具,基于 Casbin RBAC 模型:
|
||
|
||
### 基本用法
|
||
|
||
```bash
|
||
# 查看权限管理帮助
|
||
./target/release/mapp permissions --help
|
||
|
||
# 列出所有权限策略
|
||
./target/release/mapp permissions list
|
||
|
||
# 重新加载权限策略
|
||
./target/release/mapp permissions reload
|
||
```
|
||
|
||
### 权限策略管理
|
||
|
||
```bash
|
||
# 添加权限策略:给 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
|
||
```
|
||
|
||
### 用户角色管理
|
||
|
||
```bash
|
||
# 为用户分配角色
|
||
./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
|
||
```
|
||
|
||
### 权限检查
|
||
|
||
```bash
|
||
# 检查用户是否有特定权限
|
||
./target/release/mapp permissions check --user-id user123 --resource pages --action write
|
||
```
|
||
|
||
### 常用权限配置示例
|
||
|
||
```bash
|
||
# 创建管理员角色权限
|
||
./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 |
|
||
|
||
### 数据库迁移
|
||
|
||
```bash
|
||
# 运行所有迁移
|
||
./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 # 权限管理服务
|
||
```
|
||
|
||
### 构建
|
||
|
||
```bash
|
||
# 开发构建
|
||
cargo build
|
||
|
||
# 发布构建
|
||
cargo build --release
|
||
|
||
# 运行测试
|
||
cargo test
|
||
|
||
# 代码检查
|
||
cargo clippy
|
||
```
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
|
||
|
||
## 贡献
|
||
|
||
欢迎提交 Issue 和 Pull Request!
|
||
|
||
## 支持
|
||
|
||
如有问题,请通过以下方式联系:
|
||
|
||
- 提交 GitHub Issue
|
||
- 发送邮件至 [support@example.com] |