# Map Application Server (MAPP) 一个基于 GraphQL 的现代地图应用服务器,支持实时数据同步、权限管理和多租户架构。 ## 功能特性 - 🗺️ 基于 GraphQL 的地图数据服务 - 🔐 基于 Casbin 的 RBAC 权限管理 - 📡 Kafka 消息队列集成 - 🗄️ PostgreSQL 数据库支持 - 🚀 高性能异步架构 - 🔧 完整的 CLI 管理工具 ## 快速开始 ### 环境要求 - Rust 1.70+ - PostgreSQL 12+ - Kafka 2.8+ (可选) ### 安装 ```bash # 克隆项目 git clone 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]