Casbin元模型:
PERM模型
P(策略)={sub,obj,act,eft}一般存储到数据库
Sub:访问实体,一般是用户或者角色,可以用来表示用户的身份信息
object:被访问的资源,例如 文件,数据库表等
act:访问的方法,例如读取,写入。
eft:策略结果,一般为空,默 认指定allow。
E(影响):决定我们是否放行
R(请求):request
M(匹配规则):r(请求)与p的匹配规则,会把r和p按照规则进行匹配,从而返回匹配结果,如果eft没有定义就返回allow,如果定义过了就返回定义的那个结果。
ACL模型:访问控制模型,基于对象(资源)和主体(角色)以及他们之间的权限规则进行权限控制。
Casbin可以:
① 支持自定义请求格式,默认 sub,obj,act
② 具有访问控制模型model和策略policy两个核心概念
③ 支持RBAC中多层角色继承,不仅主体可以有角色,资源也可以有角色
④ 支持多种内置操作符。
不可以:
不能身份验证,casbin只负责访问控制,要有其他组件进行身份验证。
go代码
package main
import (
"fmt"
"github.com/casbin/casbin/v2"
gormadapter "github.com/casbin/gorm-adapter/v3"
)
func main() {
//创建适配器实例
a, _ := gormadapter.NewAdapter("mysql", "root:123456@tcp(127.0.0.1:3306)/test", true) //它是gorm库的一个函数,创建一个适配器
e, err := casbin.NewEnforcer("./casbin/model.conf", a)
/*
casbin.NewEnforcer:创建一个权限管理器实例,一般会接收casbin配置文件的路径,创建一个Enforcer(权限管理器)实例
这个实例是Casbin的核心,负责加载并管理权限模型和策略。可以用来执行访问控制的各种操作,如验证权限,判断用户是否有访问某个操作的权力。
*/
if err != nil {
fmt.Println(err.Error())
return
}
sub := "alice" //访问的实体
obj := "data" //访问资源
act := "read" //访问方法
//e.AddPolicy("alice", "data", "read")//添加权限data
ok, err := e.Enforce(sub, obj, act)
if err != nil {
fmt.Println("========================err:", err)
}
if ok == true {
fmt.Println("通过")
} else {
fmt.Println("不通过=========")
}
}
标签:控制,err,casbin,fmt,访问,act,权限 From: https://www.cnblogs.com/ybex/p/17719837.html