Casbin入门

Casbin

1. Casbin 是什么

Casbin是一个使用Go语言打造的轻量级开源访问控制框架,支持多种经典的访问控制方案,比如基于属性的访问控制ABAC

2. Casbin的主要特性

  1. 支持自定义请求的格式,默认的请求格式为{subject,object,action};
  2. 具有访问控制模型model和策略policy两个核心概念;
  3. 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色
  4. 支持超级用户,如root或Administrator,超级用户可以不受授权策略的约束访问任意资源
  5. 支持多种内置的操作符,如keyMatch,方便对路径式的资源进行管理,如/foo/bar 可以映射到/foo*;

3.Casbin的ABAC测试使用

需要先初始化模型文件和策略文件

模型文件初始化如下

[request_definition]
r = sub, obj, act       # 


[policy_definition]
p = sub, obj, act

# 策略
[matchers]  
m = r.sub.Hour >= 9 && r.sub.Hour < 18 && r.sub.Trust > 60 || r.sub.Name == r.obj.Owner && r.sub.Trust > 50 || r.sub.Trust >= 80

[policy_effect]
e = some(where (p.eft == allow))

策略文件为空即可

测试

type Object struct {		//资源	
	Name  string
	Owner string
}

type Subject struct {		//申请者
	Name string
	Hour int
	Trust int
}

func check(e *casbin.Enforcer, sub Subject, obj Object, act string) {
	ok, err := e.Enforce(sub, obj, act)		//判断的函数
	
	if err != nil {
		log.Fatal("Enforce Error",err)
	}

	if ok {
		fmt.Printf("%s CAN %s %s at %d:00\n", sub.Name, act, obj.Name, sub.Hour)
	} else {
		fmt.Printf("%s CANNOT %s %s at %d:00\n", sub.Name, act, obj.Name, sub.Hour)
	}
}

func main() {

	e, err := casbin.NewEnforcer("./model.conf", "./policy.csv")		//通过model.conf 和policy.csv来创建对象
	if err != nil {
		log.Fatalf("NewEnforecer failed:%v\n", err)
	}

	o := Object{"data", "dsy"}			//实例化资源对象o
    
	s1 := Subject{						//实例化访问者对象
		Name :"dajun", 
		Hour :	10,
		Trust:  80,
	}
	check(e, s1, o, "read")			//调用check函数进行判断

	s2 := Subject{						
		Name :"dsy", 
		Hour :	10,
		Trust:  60,
	}
	check(e, s2, o, "read")

	s3 := Subject{
		Name :"dsy", 
		Hour :	20,
		Trust:  40,
	}
	check(e, s3, o, "read")

	s4 := Subject{
		Name :"wkh", 
		Hour :	10,
		Trust:  70,
	}
	check(e, s4, o, "read")
}

定义访问者的三个属性,分别为Name,Trust和Hour,通过Model指定只有特定的Name、Hour和Trust组合才能够对资源进行访问

测试结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值