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.csv。model.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

4150

被折叠的 条评论
为什么被折叠?



