前言
认证 (Authentication)和 鉴权 (Authorization)是不同的概念 本例子是鉴权部分,使用Casbin作为鉴权
什么是 Casbin?
Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。目前这个框架的生态已经发展的越来越好了。提供了各种语言的类库,自定义的权限模型语言,以及模型编辑器。 Casbin 根本上是依托规则引擎做的软件设计,抽取出来的模型可以做到通用化,能够轻松的使用多种不同的控制模型
Casbin 可以
支持自定义请求的格式,默认的请求格式为{subject, object, action}。
具有访问控制模型 model 和策略 policy 两个核心概念。
支持 RBAC 中的多层角色继承,不止主体可以有角色,资源也可以具有角色。
支持内置的超级用户 例如:root 或 administrator。超级用户可以执行任何操作而无需显式的权限声明。
支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*
鉴权模型
Casbin有很多种模型, 例如:
- ACL
- RBAC
- Restful
- ABAC
本库是以RBAC模型为例, 通过Casbin的API来实现RBAC模型的鉴权功能.
RBAC模型
一种基于角色的访问控制模型, 该模型定义了以下模型和3种角色: subject 实体, 本库的实体为学生 object 对象, 本库的对象为学生 action 行为, 本库的行为为读和写权限
- 学生, 只能对学生路由进行读写, 其他路由无权限
- 教师, 只能对教师路由进行读写, 其他路由无权限
- 管理员, 对所有的路由进行读写
使用
-
拉取本库
go get github.com/lisa-sum/go-casbin-RBAC -
安装依赖
go mod tidy -
运行
go run main.go -
访问路由, 使用不同的角色访问不同的路由, 例如role=student, role=teacher, role=admin, 观察返回的结果
- 学生路由:
curl http://localhost:8080/student/zhangsan?role=student - 教师路由:
curl http://localhost:8080/teacher/zhangsan?role=teacher - 管理员路由:
curl http://localhost:8080/admin/zhangsan?role=admin
- 学生路由:
本例存储库: github.com/lisa-sum/go…
参考
- Casbin官网: casbin.org/zh/docs/ove…
- Casbin模型: casbin.org/zh/docs/cat…
- Casbin编辑器: casbin.org/zh/editor/
- mp.weixin.qq.com/s/hXYUwZVIK…