• Casbin 进行权限控制验证


    install

    go get github.com/casbin/casbin/v2
    
    • 1

    配置model

    权限控制主要的三要素:sub(用户),obj(资源),act(操作)
    request_definition:定义请求的要素
    policy_definition:定义策略的要素
    role_definition:定义角色继承关系
    matchers:权限匹配逻辑
    policy_effect:可以对matchers匹配的结果进行再次验证

    [request_definition]
    r = sub, obj, act
    
    [policy_definition]
    p = sub, obj, act
    
    [role_definition]
    g = _, _
    
    [policy_effect]
    e = some(where (p.eft == allow))
    
    [matchers]
    m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    配置policy

    p代表权限,g代表管理员
    alice 具备data1的read(g的subject和p的subject相同,实现了在原有的角色上添加额外的权限)和data2的read&write
    xie 的权限和alice一样(角色还能继承)。由于角色的继承和分配的位置是同一个,所以你很难直接看出来这是继承角色,还是分配角色。所以一般在角色前面加上Role(如:Role::admin)

    p, alice, data1, read
    p, bob, data2, write
    p, data2_admin, data2, read
    p, data2_admin, data2, write
    g, alice,data2_admin
    g, xie,alice
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    权限验证

    使用 NewEnforcer 加载 model 和 policy 得到执行者
    执行者通过Enforce(sub,obj,act) 来判断是否可执行

    package main
    
    import (
    	"fmt"
    	"github.com/casbin/casbin/v2"
    )
    
    func main() {
    	enforcer, err := casbin.NewEnforcer("/Users/xieruixiang/go/src/good/model.conf", "/Users/xieruixiang/go/src/good/rbac_policy.csv")
    	if err != nil {
    		panic(err)
    	}
    	ok, err := enforcer.Enforce("alice", "data1", "read")
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(ok)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    [从零学习汇编语言] - 标志寄存器
    浏览器渲染原理-通俗易懂版本
    ES6中set()和map()数据结构
    C# 继承
    抽象代数精解【9】
    虚拟机快照(挺重要的)
    动手深度学习-2.2数据预处理
    react事件与原生事件的区别
    Python入门-基础知识-模块
    RunnerGo UI自动化测试功能使用体验
  • 原文地址:https://blog.csdn.net/qq_29744347/article/details/126219013