CasbinX 是一个基于 Casbin 的安全权限管理引擎,实现了分级权限控制和全面的安全保护机制。项目专注于防范提权漏洞,提供系统级权限保护,支持多租户环境下的精细化权限管理。
# 启动 PostgreSQL 和 Redis
docker-compose -f tests/docker-compose.test.yml up -d# Windows PowerShell
.\test.ps1
# 或手动验证
go build ./...
go test -v ./tests/integration/... -run=TestNone# 运行所有集成测试
go test -v ./tests/integration/...
# 或使用 Makefile (Linux/macOS)
make testpackage main
import (
"casbinx/core"
"casbinx/engine"
)
func main() {
config := core.Config{
Dsn: "postgres://user:pass@localhost/db?sslmode=disable",
PossiblePaths: []string{"./rbac_model.conf"},
Security: core.DefaultSecurityConfig(),
}
casbinx, err := engine.NewCasbinx(config)
// 使用 CasbinX 进行权限管理...
}- ✅ 防止自我提权:阻止用户给自己分配管理权限
- ✅ 系统权限保护:核心系统权限完全不可变更
- ✅ 租户隔离:严格的多租户数据隔离
- ✅ 角色保护:系统角色不可修改,只能在初始化时分配
- ✅ 操作者验证:所有权限操作都验证操作者身份
- 🔐 分级权限:普通权限 vs 系统权限
- 👥 角色继承:支持复杂的角色权限继承
- 🏢 多租户:完整的租户隔离和管理
- 📊 权限查询:安全的权限查询接口
- 🔄 实时同步:基于 Redis 的多实例权限同步
package main
import (
"casbinx/core"
"casbinx/engine"
)
func main() {
config := core.Config{
Dsn: "postgres://user:pass@localhost/db?sslmode=disable",
PossiblePaths: []string{"./rbac_model.conf"},
Security: core.DefaultSecurityConfig(),
Watcher: core.WatcherConfig{
Redis: core.RedisWatcherConfig{
Addr: "localhost:6379",
Channel: "casbinx_sync",
},
},
}
casbinx, err := engine.NewCasbinx(config)
if err != nil {
panic(err)
}
// 使用 CasbinX...
}// 授予权限
err := casbinx.GrantPermission(
"admin_001", // 操作者
"user_001", // 目标用户
"company_001", // 租户
core.Permission{
Resource: "document",
Action: core.ActionRead,
},
)
// 检查权限
hasPermission, err := casbinx.CheckPermission(
"user_001",
"company_001",
core.Permission{Resource: "document", Action: core.ActionRead},
)
// 角色管理
err = casbinx.AssignRole("admin_001", "user_001", "editor", "company_001")项目专注于集成测试,确保完整业务流程的正确性:
# 启动测试环境
docker-compose -f tests/docker-compose.test.yml up -d
# 运行集成测试
go test -v ./tests/integration/...
# 生成覆盖率报告
go test -coverprofile=coverage.out ./tests/integration/...
go tool cover -html=coverage.out -o coverage.htmlmake test # 运行测试
make test-coverage # 生成覆盖率报告casbinx/
├── core/ # 核心类型和安全验证器
│ ├── config.go # 配置定义
│ ├── security.go # 安全验证器
│ ├── permission.go # 权限相关类型
│ └── ...
├── engine/ # CasbinX 主要接口
│ ├── engine.go # 接口定义
│ └── handler.go # 实现逻辑
├── internal/ # 内部实现模块
│ ├── check/ # 权限检查
│ ├── policy/ # 策略管理
│ ├── role/ # 角色管理
│ └── user/ # 用户权限管理
└── tests/ # 集成测试
├── helpers/ # 测试辅助函数
├── fixtures/ # 测试配置文件
└── integration/ # 集成测试用例
- Go 1.25+
- PostgreSQL 15+ (用于测试)
- Redis 7+ (用于测试)
- Docker & Docker Compose (用于测试)
# 构建项目
go build ./...
# 代码格式化
go fmt ./...
# 静态分析
go vet ./...
# 依赖管理
go mod tidymake help # 显示所有命令
make build # 构建项目
make fmt # 格式化代码
make vet # 静态分析
make dev-test # 开发时快速测试
make ci # 完整 CI 流程- CLAUDE.md - 项目架构和开发指南
- tests/README.md - 集成测试文档
- 普通权限:可自由授予和撤销的日常操作权限
- 系统权限:不可变更的核心系统权限(租户管理、系统配置等)
- 防自我提权:阻止用户给自己分配管理权限
- 系统角色保护:包含系统权限的角色完全不可修改
- 租户隔离:严格的多租户数据隔离
- 操作者验证:所有权限管理操作都验证操作者权限
我们欢迎各种形式的贡献!请查看 贡献指南 了解详情。
本项目采用 Apache 2.0 许可证 - 详见 LICENSE 文件。