Casbin访问控制框架入门详解及Java案例示范

【Casbin】一篇文章入门Casbin Policy 就是一种定义,它界定了策略的含义。[policy_definition] //定义policy.csv存储到数据库中策略一般会存储到数据库,因为会有很多策略eg:在本例中,sub、obj和act代表经典的访问三元组:主题(访问实体)、对象(访问资源)和操作(访问方法)。但是,我们也可以自定义自己的请求格式。例如,如果不需要指定特定的资源,可以使用sub, act;如果有两个访问实体,可以使用。 阅读详情

1、Casbin基本介绍

Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。

Casbin 可以:

  • 支持自定义请求的格式,
  • List item

默认的请求格式为{subject, object, action}。 2. 具有访问控制模型model和策略policy两个核心概念。 3. 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。 4. 支持内置的超级用户 例如:root 或 administrator。超级用户可以执行任何操作而无需显式的权限声明。 5. 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*

2、为什么要使用Casbin

使用casbin,在前后端分离中,前端每次只要传一个包含用户的JWT,后端就知道当前访问的API是否有权限。另外,Casbin支持多语言,这样在策略不用改变的情况下,别的语言也可以使用。

3、工作原理

PERM模型

在 Casbin 中, 访问控制模型被抽象为基于 PERM (Policy, Effect, Request, Matcher) 的一个文件,描述了资源与用户之间的关系。

PERM :

  • Policy:策略,定义权限的规则, p = {sub, obj, act, eft},策略一般存储到数据库,因为会有很多。
  • Effect:影响,它决定我们是否可以放行。
  • Request: 访问请求, r = {sub, obj, act}。
  • Matcher: 匹配规则,判断 Request 是否满足 Policy。

Request

一个请求可能长这样: r={sub,obj,act},它实际上定义了我们应该提供访问控制匹配功能的参数名称和顺序。 sub, obj, act, eft含义如下:

  • sub:subject,访问实体;
  • obj: object,访问的资源;
  • act: action,访问方法;
  • eft: effect,策略结果,一般为空,默认指定allow,还可以定义为deny。

4、Module File 语法

Model是Casbin的具体访问模型,其主要以文件的形式出现,该文件常常以.conf最为后缀。

  • Model CONF 至少应包含四个部分: [request_definition], [policy_definition], [policy_effect], [matchers]。
  • 如果 model 使用 RBAC, 还需要添加[role_definition]部分。
  • Model CONF 文件可以包含注释。注释以 # 开头, # 会注释该行剩余部分。

Request定义

[request_definition]
r = sub, obj, act

[request_definition] 部分用于request的定义,它明确了 e.Enforce(...) 函数中参数的含义。sub, obj, act 表示经典三元组: 访问实体 (Subject),访问资源 (Object) 和访问方法 (Action)。

Policy定义

[policy_definition]
p = sub, obj, act

[policy_definition] 部分是对policy的定义,policy部分的每一行称之为一个策略规则, 每条策略规则通常以形如p, p2的policy type开头。

Policy effect定义

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

[policy_definition] 部分是对policy的定义。上面的策略效果表示如果有任何匹配的策略规则 允许, 最终效果是 允许 (aka allow-override). p.eft 是策略的效果,它可以 允许 或 否定。 它是可选的,默认值是 允许。 因为我们没有在上面指定它,所以它使用默认值。

匹配器

[matchers] 是策略匹配程序的定义。匹配程序是表达式。它定义了如何根据请求评估策略规则。

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

上述匹配器是最简单的,这意味着请求中的主题、对象和行动应该与政策规则中的匹配。

完整model.conf

# Request定义
[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

5、Casbin模型

ACL模型

我们定义一个策略 p = {sub, obj, act},定义一个匹配规则,通过请求过来的参数 r = {sub, obj, act}与策略通过规则进行匹配,获得一个Effect影响,拿到影响的结果,进入影响的表达式,返回一个布尔值。

run the test,我们可以发现第一行,第二行为true,第三行为false。这是因为在Policy中,我们定义了用户名为alice的这个人有对data1,data2数据的read和write的操作,因此查询结果返回为true。而没有定义其对data2的read操作,因此返回为false。

RBAC模型

  • g = _ , _ 表示用户是哪个角色;
  • g = , ,_ 表示 用户是哪个角色,属于哪个商户。

run the test,我们可以发现第一行,第二行都为true。这是因为alice, data2, read首先通过g(r.sub, p.sub)映射成data2_admin, data2, read,然后data2_admin, data2, read在Policy中去进行查找,发现可以找到这条规则,因此返回为true。这意味着 alice 是角色 data2_admin的一个成员。alice 在这里可以是用户、资源或角色。 Cabin 只是将其识别为一个字符串。

RABC with domains/tenants

run the test,结果为true。这是因为alice, domain1, data1, write 首先通过g(r.sub, p.sub, r.dom)映射成admin, domain1, data1, write,然后再去Policy中去进行查找,发现可以找到这条规则,因此返回为true。

6、Java代码实践(Casbin小案例)

6.1、项目结构

6.2、引入依赖

<dependencies>
        <dependency>
            <groupId>org.casbin</groupId>
            <artifactId>jcasbin</artifactId>
            <version>1.2.0</version>
        </dependency>
 </dependencies>

6.3、引入model.conf文件

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

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

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

6.4、引入policy.csv文件

policy.csv文件就相当于一张权限表。

p, zhangsan, data1, read

6.5、引入核心测试代码

import org.casbin.jcasbin.main.Enforcer;

public class MyMain {
    public static void main(String[] args) {
        String resPath = MyMain.class.getResource("/").getPath();
        Enforcer e = new Enforcer(resPath + "model.conf", resPath + "policy.csv");

        String sub = "zhangsan";
        String obj = "data1";
        String act = "read";

        if (e.enforce(sub, obj, act) == true) {
            System.out.println("通过");
        } else {
            System.out.println("未通过");
        }
    }
}

6.5、运行结果

golang每日一库——casbin开源的访问控制框架 部分用于request的定义,它明确了函数中参数的含义。表示经典三元组: 访问实体 (Subject),访问资源 (Object) 和访问方法 (Action)。但是, 你可以自定义你自己的请求表单, 如果不需要指定特定资源,则可以这样定义sub、act,或者如果有两个访问实体, 则为。这些是我们对policy规则的具体描述policy部分的每一行称之为一个策略规则, 每条策略规则通常以形如pp2的开头。如果存在多个policy定义,那么我们会根据前文提到的与具体的某条定义匹配。TIP。 阅读详情

相关推荐

go 微服务访问控制之 Casbin

在构建 Web 服务时,安全认证及授权是首要解决的问题,主要涉及(身份认证)和: 验证用户身份,确定"谁可以访问": 控制访问权限,确定"以什么方式访问什么资源"Audit: 记录访问日志,用于安全审计对于 Go 服务来说,可以使用Casbin这个强大的开源访问控制库,它提供了灵活的权限管理功能,可以实现上述常见的访问控制模型。策略驱动:权限规则存储在策略文件中(如 CSV 或 JSON),便于管理和修改模型抽象:使用.conf文件定义访问控制模型,提高灵活性高性能。

温故而知新 1198

casbin的详细理解过程(附图片理解)(rbac模型)

一、casbin模型 casbin模型又叫PERM模型: subject(sub 访问实体),object(obj访问的资源)和action(act访问方法)eft(策略结果,一般为空 默认指定allow)还可以定义为deny 1)Policy策略 ——— p = {sub, obj, act, eft} 1、策略一般存储到数据库,因为会有很多 2、 [policy_definition] p = sub, obj, act 2)Matchers 匹配规则 Request和Policy的匹配规则 1、

weixin_51991615的博客 1万+

Casbin——Java版本(笔记)

Casbin笔记

weixin_46949627的博客 3616

casbin使用及技术原理

casbin使用及原理

qq_35270227的博客 6179

Golang工程组件之轻量级访问控制框架casbin

casbin还支持多语言,包括Golang、Java、Python、C++等,因此非常适合在跨平台的应用程序中使用。在上面的代码中,我们首先创建了一个casbin模型对象,并使用NewEnforcer方法指定了模型配置文件和策略文件。在Golang开发中,访问控制是一项非常重要的任务,而casbin作为一款轻量级的访问控制框架,可以帮助我们实现各种复杂的访问控制需求。casbin是一款非常实用的轻量级访问控制框架,它提供了多种访问控制模型和存储策略支持,使得应用程序可以更加安全和可靠。

SMILY12138的博客 687

qupath再度更新:使用WSInfer进行深度学习

我们在下面提供了一个示例,说明如何使用 WSInfer 创建 WSI 中肿瘤和肿瘤浸润淋巴细胞 (TIL) 的空间图谱,这些图谱被认为在几种癌症中既有预后又有预测意义6,10,11,12.由于 WSI 非常大,因此它们通常被分解为补丁,以使分析变得可行。补丁分类的输出通常是空间分类地图,通常可以跨 WSI 集成,以创建表示该幻灯片的诊断、预测或“分数”的单个输出。在当前的实施中,我们专注于斑块分类的通用任务,该任务广泛用于广泛的病理学应用,具有促进诊断、预后或预测功能的深度学习模型。

hx2024的博客 2203

【Golang】 golang 访问控制框架casbin

一。 开始 Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。 ACL (Access Control List, 访问控制列表) 具有超级用户 的 ACL 没有用户的 ACL: 对于没有身份验证或用户登录的系统尤其有用。 没有资源的 ACL: 某些场景可能只针对资源的类型, 而不是单个资源, 诸如 write-article , read-log 等权限。...

Not_a_penny_to_name的博客 1216

Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略

本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。

weixin_30596165的博客 616

casbin访问控制库详解

casbin是一个强大、高效的访问控制库。支持常用的多种访问控制模型,如ACL/RBAC/ABAC等。可以实现灵活的访问权限控制。同时,casbin支持多种编程语言,Go/Java/Node/PHP/Python/.NET/Rust。本文以Go作为示例进行描述。 一、例子1 先来看第一个例子,在这个例子中,我们控制用户名为“admin”的用户对web路径“/user/*”,有“get”的访问权限,用户“user”对web路径“/goods/list”有“post”访问权限,用户“root”对一切都有访问权限

m0_46455711的博客 2414

在PLC中将十六进制数据转换为浮点数(通常遵循IEEE 754标准)需要理解数据存储格式,并按以下步骤操作:

通过以上步骤,您可以在PLC中实现十六进制到浮点数的转换。T DBD20 // 将数据传送到浮点数变量(如DB1.DBD20)指数位(8位):实际指数 = 存储值 - 127(偏移量)。:必须确认PLC的存储顺序(大端或小端),否则结果错误。将两个16位寄存器合并为32位数据,需注意。尾数位(23位):隐含前导1,实际值为。:确保32位数据在寄存器中连续且对齐。符号位(1位):0表示正,1表示负。:高位寄存器在前(如西门子PLC)。:低位寄存器在前(如三菱FX系列)。,误差因截断导致)。

K11mvp的博客 4419

RTC 实时时钟实验

如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。

m0_55996456的博客 1205

Casbin是什么?

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

qq_63730529的博客 1566

机器学习与深度学习基础概念

本篇主要介绍机器学习主要概念,包括不限于标签、特征、样本、训练、模型、回归模型、分类模型、泛化、过拟合、预测、平稳性、训练集、验证集、测试集。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 3万+

Casbin 开源项目教程

Casbin 开源项目教程 【免费下载链接】casbin An authorization library that supports access control models like ACL, RBAC, ABAC in Golang: https://discord.gg/S5UjpzGZjN ...

gitblog_00659的博客 945

YOLOv11 改进 - 即插即用 | PST金字塔稀疏Transformer:粗粒度到细粒度推理优化特征提取,提升复杂场景适应性

本文介绍了金字塔稀疏 Transformer(PST)与 YOLOv11 的结合。主流基于注意力的特征融合方法计算复杂度高、实现难度大,作者提出 PST 模块,融合粗到细令牌选择与共享注意力参数机制,在保留空间细节的同时降低计算量。该模块通过层级化注意力机制、动态令牌选择与参数共享,实现高效多尺度特征融合

魔改工程师的博客 830

分数间隔均衡器的基本原理及应用(使用Matlab)

通过对接收信号进行加权求和,分数间隔均衡器可以抵消信号在传输过程中受到的频率响应失真。Matlab提供了丰富的工具和函数,可以方便地实现分数间隔均衡器,并进行性能评估。分数间隔均衡器(Fractional Interval Equalizer)是一种数字信号处理技术,用于均衡带通信道中的信号失真。分数间隔均衡器的基本原理是通过对接收信号进行加权求和,以抵消信号在传输过程中受到的频率响应失真。分数间隔均衡器在通信系统中具有广泛的应用。最后,我们通过比较均衡后的信号和发送数据的阈值来进行解调,并计算误码率。

2301_79325657的博客 684

Golang访问控制框架:Open Policy Agent vs Casbin

大型项目中基本都包含有复杂的访问控制策略,特别是在一些多租户场景中,例如Kubernetes中就支持RBAC,ABAC等多种授权类型。在Golang中目前比较热门的访问控制框架有与,本文主要分析其异同与选型策略。

dzqxwzoe的博客 1189

STM32(HAL库)驱动HC-SR04测距模块

本文介绍通过STM32F103C8T6单片机对HC-SR04测距模块进行驱动,并且通过串口对数据进行打印。

weixin_44597885的博客 2204

使用 Casbin 实现基于角色的访问控制(RBAC)

g = _, _[matchers]

Villiam_AY的博客 1449

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

认识casbin

Casbin 是一个强大的、高效的开源访问控制库,支持各种访问控制模型,包括但不限于 ACL(Access Control List)、RBAC(Role-Based Access Control)、ABAC(Attribute-Based Access Control)、ACL + RBAC 混合模型等。Casbin 提供了一套统一的 API 接口,使得开发者可以方便地在不同项目中集成访问控制功能。

m0_70982551的博客 1502

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

权限访问控制库Casbin的ABAC模式(含实例代码)

本文介绍了在Java环境下使用JCasbin+SpringBoot实现ABAC(基于属性的访问控制)权限模型的开发方法。文章详细说明了ABAC模式下如何通过自定义函数实现复杂业务规则,解决了官方示例过于简单的问题,为生产环境应用提供了实践参考。

dengyi19881212的专栏 1543

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 4种Kafka网络中断和网络分区场景分析
下一篇: Kubernetes核心技术剖析和落地经验
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值