Casbin是什么?

简介

Casbin是一个开源的访问控制框架,它支持多种访问控制模型,如ACL(访问控制列表)、RBAC(基于角色的访问控制)、ABAC(基于属性的访问控制)等。Casbin的设计目标是提供一个灵活、高效、易于使用的权限管理解决方案,适用于各种规模的项目。

主要特点

  • 多种访问控制模型

    • Casbin支持多种访问控制模型,包括ACL、RBAC、ABAC等,这些模型可以单独使用,也可以组合使用以满足复杂的权限管理需求。
  • 策略持久化

    • Casbin的策略可以存储在多种地方,包括内存、文件、数据库等。目前支持多种数据库,如MySQL、Postgres、Oracle、MongoDB、Redis、Cassandra、AWS S3等。
  • 跨语言支持

    • Casbin已经用多种语言实现,包括Go、Java、Node.js、PHP、Python、C#、Delphi、Rust、Lua等,所有实现共享相同的API和行为,学习一次即可在不同语言项目中使用。
  • 灵活的策略存储方式

    • 除了内存和文件,Casbin的策略可以存储在多种数据库中,这为大型多租户环境提供了有效的策略执行能力。
  • 角色管理器

    • Casbin提供了角色管理器来管理RBAC中的角色继承关系,可以与外部系统如LDAP、Okta、Auth0、Azure AD等集成。
  • 身份认证与访问控制的分离

    • Casbin只负责访问控制,而身份认证(即验证用户的用户名和密码)则应由其他专门的组件负责。这种设计使得Casbin可以与其他身份验证系统无缝集成。
  • 简单的使用方式

    • 创建一个Casbin执行器(Enforcer)需要提供一个模型(Model)和一个适配器(Adapter)。模型定义了访问控制的结构,而适配器则负责策略的存储和读取。Casbin提供了多种适配器,包括文件适配器和数据库适配器,以适应不同的存储需求。
  • 管理API

    • Casbin提供了管理API,允许在运行时进行权限管理,例如获取分配给用户的角色列表等。
  • 社区支持

    • Casbin有一个活跃的社区,提供了丰富的文档和示例,帮助开发者快速上手和解决问题。

工作原理

Casbin的工作原理基于PERM模型,即Policy(策略)、Effect(效果)、Request(请求)、Matcher(匹配器)。通过配置文件定义这些组件,可以轻松地切换或升级项目的授权机制。

策略(Policy):

策略定义了具体的权限规则,它通常存储在策略文件中,如.csv或.txt文件。策略文件包含了哪些用户或角色可以执行哪些操作的详细信息。

效果(Effect):

效果定义了策略的执行结果,它可以被理解为一种模型,在这种模型中,对匹配结果再次作出逻辑组合判断。通常是"允许"或"拒绝"。在Casbin中,如果策略匹配并且效果为"允许",则请求被授权。

请求(Request):

请求代表了对资源的访问请求,它通常包含主体(如用户)、资源和操作。Casbin在执行访问控制决策时,会将请求与策略进行匹配。

定义请求参数,基本请求是一个元组对象,至少需要主题(访问实体)、对象(访问资源) 和动作(访问方式);例如,一个请求可能长这样: r={sub,obj,act},它实际上定义了我们应该提供访问控制匹配功能的参数名称和顺序。

匹配器(Matchers):

匹配器是Casbin中用于匹配请求和策略的逻辑。它定义了如何比较请求中的元素与策略中的元素,以确定是否匹配

模型(Model)

Casbin的模型定义了访问控制的结构,包括请求定义(request_definition)、策略定义(policy_definition)、角色定义(role_definition)、策略效果(policy_effect)和匹配器(matchers)。模型文件通常以.conf或.model为后缀,它使用Casbin的模型编辑器进行编辑和维护。

适配器(Adapter):

Casbin使用适配器来加载和保存策略,适配器可以是文件系统、数据库或其他存储系统。适配器允许Casbin动态地添加、修改或删除策略,而不需要重启应用程序。

执行器(Enforcer):

执行器是Casbin中用于执行访问控制决策的组件。它根据模型和策略文件来验证传入的请求是否被授权。

Watcher:

Watcher是Casbin中用于监听策略变化的组件。当策略存储在数据库或其他外部系统中时,Watcher可以监听这些变化,并将最新的策略更新到执行器中。

角色管理器(Role Manager):

在RBAC模型中,角色管理器用于管理角色之间的继承关系。它允许定义角色的层次结构,并管理用户和角色之间的关系。

如何使用?

导入依赖

要在项目中使用casbin,首先需要加载依赖:

go 复制代码
go get github.com/casbin/casbin/v2

配置文件

Casbin使用配置文件来设置访问控制模式,它有两个配置文件,model.conf和policy.csv。 其中,model.conf存储了访问模型,policy.csv存储了特定的用户权限配置。基本上,我们只需要一个主要结构:enforcer。要新建一个Casbin执行器,你必须提供一个Model和一个Adapter。

go 复制代码
import "github.com/casbin/casbin/v2"
e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")

这行代码用于初始化一个Casbin的执行器(Enforcer);

🧠由代码可以看出策略是从本地文件"path/to/policy.csv"中加载的。这意味着策略是静态的,任何对策略的更改都需要修改CSV文件并重新启动应用程序。

🧠而path/to/model.conf指向一个模型文件,通常是 .conf 文件,它定义了访问控制模型的结构。这个模型文件描述了如何表达和匹配访问控制策略,包括请求定义(request_definition)、策略定义(policy_definition)、角色定义(role_definition,如果有的话)、策略效果(policy_effect)和匹配器(matchers)。

参考文档:casbin

相关推荐
ifanatic2 小时前
[面试]-golang基础面试题总结
面试·职场和发展·golang
懒是一种态度2 小时前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
XINGTECODE3 小时前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
入 梦皆星河3 小时前
在 Ubuntu/Debian 上安装 Go
ubuntu·golang·debian
凡人的AI工具箱3 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
007php00717 小时前
GoZero 上传文件File到阿里云 OSS 报错及优化方案
服务器·开发语言·数据库·python·阿里云·架构·golang
高 朗18 小时前
【GO基础学习】基础语法(2)切片slice
开发语言·学习·golang·slice
IT书架19 小时前
golang面试题
开发语言·后端·golang
醒过来摸鱼1 天前
【Golang】协程
开发语言·后端·golang
灼华十一1 天前
算法编程题-排序
数据结构·算法·golang·排序算法