Gin框架入门-Casbin进阶之策略管理API使用方法
一、Casbin 安装
1、安装
1 | go get github.com/casbin/casbin/v2 |
2、在线编辑
您还可以使用在线编辑器 ( https://casbin.org/editor/ ) 在 Web 浏览器中编写您的 Casbin 模型和策略。
二、创建Casbin enforcer
Casbin使用配置文件来设置访问控制模式。
它有两个配置文件,model.conf和policy.csv。 其中,model.conf存储了访问模型,policy.csv存储了特定的用户权限配置。 Casbin的使用非常精炼。 基本上,我们只需要一个主要结构:enforcer。 当构建这个结构时,model.conf和policy.csv将被加载。
换句话说,要新建一个Casbin enforcer,你必须提供一个Model和一个Adapter。
1、Model.conf
Model规定了权限由 sub、obj、act三要素组成,只有在策略Policy列表中存在于请求Request完全相同的策略时,该请求才能通过。匹配器的结构通过 p.eft 获取, some(where (p.eft == allow)) 表示有任意一条 policy rule 满足, 则最终结果为 allow
1 | # 请求 |
2、Policy.csv
Policy表示谁能对什么资源进行什么操作
1 | p, linzy, data1, read |
linzy 对 资源 data1 有 read 权限
hhh 对 资源 data2 有 write 权限
3、创建enforcer
1)创建
NewEnforcer通过文件或DB创建一个enforcer
1 | //使用Model文件和默认 FileAdapter |
2)检查权限
Enforce决定一个“subject”是否可以通过操作“action”访问一个“object”,输入参数通常是:(sub, obj, act)
1 | sub := "linzy" // 需要访问资源的用户。 |

三、策略管理操作
1、查询所有授权规则
GetPolicy 获取策略中的所有授权规则。
1 | //GetPolicy获取策略中的所有授权规则。 |

2、查询是否存在授权规则
HasPolicy 确定是否存在授权规则。
1 | //HasPolicy 确定是否存在授权规则。 |

3、添加授权规则
AddPolicy 向当前策略添加授权规则。 如果规则已经存在,函数返回false,并且不会添加规则。 否则,函数通过添加新规则并返回true。
1 | policy := e.GetPolicy() |

4、删除授权规则
RemovePolicy 从当前策略中删除授权规则。
1 | policy = e.GetPolicy() |

5、修改授权规则
UpdatePolicy 把旧的政策更新到新的政策
1 | //UpdatePolicy 把旧的政策更新到新的政策 |
四、MySQL数据库搭配Model文件
1、创建SQLAdapter
我这里使用的是MySQL
1 | import ( |
当前自动创建了”casbin_rule”的数据表,且数据表为空
2、添加单条授权规则
AddPolicy 向当前策略添加授权规则。 如果规则已经存在,函数返回false,并且不会添加规则。 否则,函数通过添加新规则并返回true。
1 | added, _ := e.AddPolicy("linzy", "data1", "read") |

3、添加多条授权规则
AddPolicy 向当前策略添加授权规则。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回false,当前政策中没有添加任何政策规则。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都被添加到目前的政策中。
1 | rules := [][]string{ |

4、删除授权规则
RemovePolicy 从当前策略中删除授权规则。
1 | removed, _ := e.RemovePolicy("leyo", "data4", "read") |

5、修改授权规则
UpdatePolicy 把旧的政策更新到新的政策
1 | updated, _ := e.UpdatePolicy([]string{"jack", "data4", "read"}, []string{"linzy", "data3", "write"}) |

6、查询所有授权规则
GetPolicy 获取策略中的所有授权规则。
1 | s := e.GetPolicy() |



