# go实现的rbac权限校验系统 **Repository Path**: chenxushui/go-rbac-api ## Basic Information - **Project Name**: go实现的rbac权限校验系统 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-08-26 - **Last Updated**: 2026-09-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go RBAC API 多租户 RBAC(基于角色的访问控制)权限校验系统,为你的 Web 应用提供开箱即用的用户、角色、权限管理能力。 系统采用 **Go + Iris + GORM** 构建,密码哈希**完全兼容 Django 的 PBKDF2 格式**,可直接对接存量 Django 项目的用户数据,实现平滑迁移。 [特性](#-核心特性) · [快速开始](#-快速开始) · [API 概览](#-api-概览) · [目录结构](#-目录结构) · [文档](#-文档) --- ## ✨ 核心特性 - **多租户应用隔离**:每个应用有独立的 `app_code` 与 `app_secret`,角色强制归属应用,从数据层面杜绝跨应用越权 - **Django 密码完全兼容**:`pbkdf2_sha256` 格式(720000 次迭代),支持存量 Django 用户直接用原密码登录,并在登录时自动升级低迭代次数的旧哈希 - **JWT 双令牌**:Access Token(2 小时)+ Refresh Token(7 天),支持无感刷新,角色变更后刷新会自动同步最新应用编码 - **双模式权限校验**: - **用户模式**(`/api/v1/check`):携带 JWT,按 `code` 精确匹配(支持 `any` / `all` 批量聚合) - **应用模式**(`/api/v1/app/check`):服务间调用,凭 `app_code + app_secret` 鉴权,无需用户上下文 - **双手段匹配兜底**:`code` 精确匹配优先,`url + method` 模糊匹配兜底(Django 风格正则),兼容历史调用方 - **完整 CRUD 体系**:用户 / 角色 / 权限 / 应用四大模块,支持单条与批量操作、分页过滤、层级查询 - **操作审计日志**:登录、登出及所有写操作自动记录,追溯可查 - **内置管理后台**:基于 Iris Django 模板引擎渲染的 Web 管理界面,开箱即用 ## 🛠 技术栈 | 分类 | 选型 | |------|------| | 语言 | Go 1.25 | | Web 框架 | [Iris v12](https://github.com/kataras/iris) | | ORM | [GORM](https://gorm.io/) + MySQL | | 认证 | [golang-jwt/jwt/v5](https://github.com/golang-jwt/jwt) | | 密码 | PBKDF2(Django 兼容) | | 校验 | go-playground/validator | | 日志 | logrus + lumberjack(自动轮转) | | 会话 | Iris Session + BoltDB | | 模板 | Django 风格模板引擎 | ## 🔑 权限模型 采用 **App → Role → Permission** 三层模型,配合 **User ↔ Role** 多对多关系: ``` ┌─────────────────────────────────────────────┐ │ App(应用) │ │ app_code / app_secret(跨应用隔离边界) │ │ ┌──────────────┬──────────────┐ │ │ │ Role(角色) │ Permission(权限)│ │ │ │ Role↔Permission 多对多 │ │ │ └──────┬───────┴──────┬──────┘ │ │ │ │ │ │ ┌──────▼──────┐ │ │ │ │User↔Role 多对多 │ │ │ │ User(用户) │ │ │ └─────────────┘ │ │ └───────────────┬────────┴───────────────────┘ ▼ User / App 校验入口 ``` 权限编码格式统一为 **`{app_code}:{module}:{action}`**,例如 `celco001:plan:edit`。 ## 🚀 快速开始 ### 环境要求 - Go 1.25+ - MySQL 5.7+ ### 1. 克隆并配置 ```bash git clone cd go-rbac-api cp config/config_本地.ini config/config.ini # 或按需修改 ``` 编辑 `config/config.ini`,填入你的数据库连接: ```ini [server] AppMode = debug HttpPort = :8017 JwtKey = your_jwt_secret_key [database] Db = mysql DbHost = localhost DbPort = 3306 DbUser = root DbPassWord = your_password DbName = your_dbname ``` ### 2. 启动 ```bash go mod tidy go run main.go ``` 服务默认监听 `:8017`,启动后可通过管理后台快速配置应用、角色与权限。 ### 3. 内置管理页面 | 页面 | 地址 | |------|------| | 登录 | `/login` | | 注册 | `/register` | | 用户管理 | `/admin/user/list` | | 角色管理 | `/admin/role/list` | | 权限管理 | `/admin/permission/list` | | 权限分配 | `/admin/permission/assign` | | 应用管理 | `/admin/app/list` | | 操作日志 | `/admin/operation_log/list` | | 个人信息 | `/admin/user/profile` | ## 🔌 API 概览 ### 认证 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/v1/register` | 用户注册 | | POST | `/api/v1/login` | 登录,返回双令牌 | | POST | `/api/v1/refresh` | 刷新 Access Token | | POST | `/api/v1/logout` | 退出登录 | ### 权限校验(核心) | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/v1/check` | 用户权限校验(JWT,支持 code / url 两种模式) | | POST | `/api/v1/app/check` | 应用权限校验(app_code + app_secret,服务间调用) | ### 资源管理 | 模块 | 路径前缀 | 说明 | |------|----------|------| | 用户 | `/api/v1/user(s)` | 增删改查、批量删除、状态切换、角色分配 | | 角色 | `/api/v1/role(s)` | 增删改查、权限分配、成员管理 | | 权限 | `/api/v1/permission(s)` | 增删改查、批量删除、权限树 | | 应用 | `/api/v1/app(s)` | 增删改查、密钥重生成、权限关联 | | 日志 | `/api/v1/operation_logs` | 操作日志查询 | > 完整请求 / 响应示例见 [API 文档](docs/api.md)。 ## 📁 目录结构 ``` go-rbac-api/ ├── main.go # 程序入口 ├── api/v1/ # API 控制器层(路由处理器) │ ├── auth.go # CheckPermission / CheckAppPermission │ ├── user.go # 登录、注册、令牌刷新 │ ├── permission.go # 权限管理 │ ├── role.go # 角色管理 + App→Role→User 层级查询 │ ├── app.go # 应用管理与密钥 │ └── operation_log.go # 操作日志 ├── routers/router.go # 路由注册 ├── models/ # GORM 数据模型 ├── repository/ # 数据访问层(CRUD) ├── middeware/ # 中间件(JWT / 权限 / CORS / 日志) ├── utils/ # 工具包(JWT / URL 匹配 / 校验 / 错误码) ├── logger/ # 日志(logrus + lumberjack) ├── config/ # INI 配置文件 ├── templates/ # Django 风格模板页面 ├── static/ # 前端静态资源 └── docs/ # 文档 ``` ## 📄 文档 - [权限校验接口指南](docs/api.md) — 完整 API 文档与调用示例 ## 📝 License 本项目基于 **MIT** 许可证开源,详见 [LICENSE](LICENSE)。 ## 🤝 参与贡献 欢迎提交 Issue 与 Pull Request 共同完善这个项目!