Casbin

Casbin

  • 文档
  • API
  • 编辑器
  • IDE 插件
  • Single Sign-On (SSO)
  • 论坛
  • 帮助
  • 博客
  • Pricing
  • Contact Sales
  • Languages icon中文
    • English
    • 한국어
    • Русский
    • Français
    • Deutsch
    • 日本語
    • 参与翻译
  • GitHub

›Model

基础知识

  • 概述
  • 开始使用
  • 工作原理
  • 教程

Model

  • 支持的Models
  • Model语法
  • 效果器
  • 函数
  • 基于角色的访问控制
  • RBAC with Pattern
  • 域内RBAC
  • Casbin RBAC v.s. RBAC96
  • ABAC
  • 优先级模型
  • 超级管理员

存储

  • Model存储
  • Policy存储
  • 政策子集加载

扩充功能

  • Enforcers
  • 适配器
  • 观察者
  • 调度器
  • 角色管理器
  • 中间件
  • Graphql 中间件
  • 云端原生中间值

API

  • API 概述
  • 管理 API
  • RBAC API
  • 域内基于角色的访问控制 API
  • RoleManager API
  • 数据权限

高级用法

  • 多线程
  • 基准测试
  • 性能优化
  • Kubernetes的授权
  • 通过特使核准服务网格。

管理

  • 管理员门户
  • Casbin 服务
  • 日志 & 错误处理
  • 前端使用

编辑器

  • 在线编辑器
  • IDE 插件

更多

  • 本项目使用者
  • 贡献中
  • 隐私政策
  • 服务条款
Translate

ABAC

什么是ABAC模式?

ABAC是 基于属性的访问控制,可以使用主体、客体或动作的属性,而不是字符串本身来控制访问。 您之前可能就已经听过 XACML ,是一个复杂的 ABAC 访问控制语言。 与XACML相比,Casbin的ABAC非常简单: 在ABAC中,可以使用struct(或基于编程语言的类实例) 而不是字符串来表示模型元素。

例如,ABAC的官方实例如下:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

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

[matchers]
m = r.sub == r.obj.Owner

我们在 matcher 中使用 r.obj.Owner 代替 r.obj。 在 Enforce() 函数中传递的 r.obj 函数是结构或类实例,而不是字符串。 Casbin将使用映像来检索 obj结构或类中的成员变量。

这里是 r.obj construction 或 class 的定义:

type testResource struct {
    Name  string
    Owner string
}

如何使用ABAC?

简单地说,要使用ABAC,您需要做两件事:

  1. 在模型匹配器中指定属性。
  2. 将元素的结构或类实例作为Casbin的Enforce() 的参数传入。
warning

目前,仅有形如r.sub, r.obj, r.act 等请求元素支持ABAC。 您不能在policy元素上使用它,比如p.sub,因为在Casbin的policy中没有定义结构或者类。

tip

您可以在匹配器中使用多个ABAC属性,例如:m = r.sub.Domain == r.obj.Domain。

tip

如果你需要在策略中使用逗号与csv的分隔符相冲突,我们需要避免冲突。 Cassbin 通过 csv 库解析策略文件,你可以用引号将语句环绕。 例如, "keyMatch" ("bob", r.sub.Role)" 将不会被是为csv文件分割。

适配复杂且大量的ABAC规则

上述ABAC实例的核心非常简单,但授权系统通常需要非常复杂和大量的ABAC规则。 为了满足这一需要,上述实现将在很大程度上使得模型冗长复杂。 因此,我们可以选择在策略中添加规则代替在模型中添加规则。 这是通过引入一个 eval() 功能结构完成的。 下面是此类ABAC模型的示例。

这是用于定义ABAC模型的 CONF 文件。

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub_rule, obj, act

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

[matchers]
m = eval(p.sub_rule) && r.obj == p.obj && r.act == p.act

在这里, p.sub_rule 是由策略中使用的必要属性组成的结构类型或类类型(用户定义类型)。

这是针对Enforcement模型使用的策略 现在您就可以使用作为参数传递到 eval()函数的对象实例来定义某些ABAC约束条件。

p, r.sub.Age > 18, /data1, read
p, r.sub.Age < 60, /data2, write
← Casbin RBAC v.s. RBAC96优先级模型 →
  • 什么是ABAC模式?
  • 如何使用ABAC?
  • 适配复杂且大量的ABAC规则
Casbin
Docs
Getting StartedManagement APIRBAC APIMiddlewares
Community
Who's using Casbin?Stack Overflow
Casbin          jCasbin
Node-Casbin   PHP-CasbinPyCasbin          Casbin.NETCasbin-CPP        Casbin-RS
Follow @casbinHQ
Copyright © 2022 Casbin Organization