Casbin初识

1.概述

Casbin 是一个功能强大且高效的开源访问控制库,支持各种 访问控制模型 全面实施授权。

实施一组规则就像在策略文件中列出主题、对象和所需的允许操作(或根据您的需要的任何其他格式)一样简单。这在使用 Casbin 的所有流程中都是同义词。开发人员/管理员可以完全控制布局、执行和授权条件,这些条件通过模型文件进行设置。Casbin 提供了一个 Enforcer,用于根据提供给 Enforcer 的策略和模型文件来验证传入的请求。

2.导入依赖

   <!-- https://mvnrepository.com/artifact/org.casbin/jcasbin -->
        <dependency>
            <groupId>org.casbin</groupId>
            <artifactId>jcasbin</artifactId>
            <version>1.79.0</version>
        </dependency>

3.Casbin执行器

1.定义Enforcer

Casbin 使用配置文件来定义访问控制模型。

有两个配置文件:model.conf 和 policy.csvmodel.conf 存储访问模型,policy.csv 存储特定的用户权限配置。Casbin 的使用非常简单。我们只需要创建一个主要结构:enforcer。在构建此结构时,将加载 model.conf 和 policy.csv

换句话说,要创建 Casbin 执行器,您需要提供 Model 和 Adapter

Casbin 提供了一个 FileAdapter 供您使用。有关更多信息,请参阅适配器

  • 使用 Model 文件和默认 FileAdapter 的示例:
import org.casbin.jcasbin.main.Enforcer;

Enforcer e = new Enforcer("path/to/model.conf", "path/to/policy.csv");

2.检查权限

String sub = "alice"; // the user that wants to access a resource.
String obj = "data1"; // the resource that is going to be accessed.
String act = "read"; // the operation that the user performs on the resource.

if (e.enforce(sub, obj, act) == true) {
    // permit alice to read data1
} else {
    // deny the request, show an error
}

4.工作原理

在 Casbin 中,访问控制模型被抽象成一个基于 PERM 元模型(Policy, Effect, Request, Matchers)的 CONF 文件。切换或升级项目的授权机制就像修改配置一样简单。您可以通过组合可用模型来自定义自己的访问控制模型。例如,您可以将 RBAC 角色和 ABAC 属性合并到一个模型中,并共享一组策略规则。

PERM 模型由四个基础组成:策略、效果、请求和匹配程序。这些基础描述了资源和用户之间的关系。

1.请求

定义请求参数。基本请求是一个元组对象,至少需要一个主题(访问的实体)、对象(访问的资源)和操作(访问方法)。

例如,请求定义可能如下所示: r={sub,obj,act}

此定义指定了访问控制匹配功能所需的参数名称和顺序。

2.访问策略

定义访问策略的模型。它指定 Policy rule 文档中字段的名称和顺序。

例如: p={sub, obj, act} 或 p={sub, obj, act, eft}

注意:如果未定义 eft (policy result),则不会读取策略文件中的 result 字段,默认情况下允许匹配的策略结果。

3.匹配器

定义 Request 和 Policy 的匹配规则。

例如: m = r.sub == p.sub && r.act == p.act && r.obj == p.obj 这个简单而常见的匹配规则意味着,如果请求的参数(实体、资源和方法)等于策略中找到的参数,则返回策略结果 (p.eft)。策略的结果将保存在 p.eft 中。

4.影响

对 Matchers 的匹配结果进行逻辑组合判断。

例如: e = some(where(p.eft == allow))

此语句表示,如果匹配策略结果 p.eft 的结果是 (some) allow,则最终结果为 true。

让我们看另一个例子:

e = some(where (p.eft == allow)) && !some(where (p.eft == deny))

这个示例组合的逻辑含义是:如果有匹配 allow 结果的策略,没有匹配 deny 结果的策略,则结果为 true。换句话说,当匹配策略都被允许时,这是真的。如果存在任何 deny,则两者都为 false(更简单地说,当 allow 和 deny 同时存在时,deny 优先)。

Casbin 中最基本和最简单的模型是 ACL。ACL 的模型 CONF 如下:

# Request definition
[request_definition]
r = sub, obj, act

# Policy definition
[policy_definition]
p = sub, obj, act

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

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

ACL 模型的策略示例为:

p, alice, data1, read
p, bob, data2, write

这意味着:

  • Alice 可以读取数据1
  • Bob 可以写入数据2

我们还通过在末尾附加 '\' 来支持多行模式:

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

此外,如果您使用的是 ABAC,则可以尝试 'in' 运算符,如以下示例所示,用于 Casbin go

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值