casbin-权限控制

Casbin元模型:

PERM模型

P(策略)={sub,obj,act,eft}一般存储到数据库

Sub:访问实体,一般是用户或者角色,可以用来表示用户的身份信息

object:被访问的资源,例如 文件,数据库表等

act:访问的方法,例如读取,写入。

eft:策略结果,一般为空,默 认指定allow

E(影响):决定我们是否放行

R(请求):request

M(匹配规则)r(请求)p的匹配规则,会把rp按照规则进行匹配,从而返回匹配结果,如果eft没有定义就返回allow,如果定义过了就返回定义的那个结果。

ACL模型:访问控制模型,基于对象(资源)和主体(角色)以及他们之间的权限规则进行权限控制。 

Casbin可以:

① 支持自定义请求格式,默认 subobjact

② 具有访问控制模型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("不通过=========")
}
}

 

posted @   饮冰而行  阅读(189)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示