本文主要介绍了go语言使用Casbin实现角色的权限控制,分享给大家,具体如下:
介绍 Casbin 是什么?
官方解释:Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。
Casbin只负责访问控制。身份认证 authentication(即验证用户的用户名、密码),需要其他专门的身份认证组件负责。例如(jwt-go)
两个核心概念:
访问控制模型model和策略policy。
工作原理:
Casbin把 访问控制模型 被抽象为基于
PERM元模型 (Policy, Effect, Request, Matchers) [策略,效果,请求,匹配器], 反映了权限的本质 – 访问控制
- Policy: 定义权限的规则
- Effect: 定义组合了多个 Policy 之后的结果, allow/deny
- Request: 访问请求, 也就是谁想操作什么
- Matcher: 判断 Request 是否满足 Policy
所有 model file 中主要就是定义 PERM 4 个部分的一个文件( model.conf , 这个文件一般是固定的)。
因此,切换或升级项目的授权机制与修改配置一样简单。 您可以通过组合可用的模型来定制您自己的访问控制模型(ACL, RBAC, ABAC)。
例如,您可以在一个model中获得RBAC角色和ABAC属性,并共享一组policy规则。
g, g2, g3 表示不同的 RBAC 体系, _, _ 表示用户和角色 _, _, _ 表示用户, 角色, 域(也就是租户)
rbac_models.conf
实战
一般运用到项目后台的管理权限中
初始化数据库
初始化环境后,系统会在你选择的数据库自动生成一个casbin_rule的数据库表
用户权限的增删改查
tips:这些接口,需要放在截器中间件前面, 不然空表无法添加数据
添加权限,访问其添加接口
单个用户保存权限的路由是多条记录
在使用Casbin中间件时,会访问表中的数据库表 ,得到相应的权限信息,增加访问信息后,访问接口成功
代码
总代码
封装后的代码
参考
https://www.jianshu.com/p/9506406e745f