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

优先级模型

Casbin支持参考优先级加载策略。

通过隐式优先级加载策略

这非常简单,顺序决定了策略的优先级,策略出现的越早优先级就越高。

model.conf:

[policy_effect]
e = priority(p.eft) || deny

通过显式优先级加载策略

另见: casbin#550

策略定义中的优先级令牌名称必须是“优先级”,较小的优先级值将具有较高的优先级。 如果优先级有非数字字符,它将是被排在最后,而不是导致报错。 现在,明确的优先级仅支持 添加策略 & 添加策略,如果 升级策略 被调用,那么您不应该改变优先级属性。

model.conf:

[request_definition]
r = sub, obj, act

[policy_definition]
p = priority, sub, obj, act, eft

[role_definition]
g = _, _

[policy_effect]
e = priority(p.eft) || deny

[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

policy.csv

p, 10, data1_deny_group, data1, read, deny
p, 10, data1_deny_group, data1, write, deny
p, 10, data2_allow_group, data2, read, allow
p, 10, data2_allow_group, data2, write, allow


p, 1, alice, data1, write, allow
p, 1, alice, data1, read, allow
p, 1, bob, data2, read, deny

g, bob, data2_allow_group
g, alice, data1_deny_group

请求:

alice, data1, write --> true // `p, 1, alice, data1, write, allow` 拥有最高级的优先权
bob, data2, read --> false
bob, data2, write --> true // 对于bob是 `data2_allow_group` 的角色可以写入data2,而且没有具有更高优先级的否认策略 

基于角色和用户层次结构以优先级加载策略

角色和用户的继承结构只能是多棵树,而不是图。 如果一个用户有多个角色,您必须确保用户在不同树上有相同的等级。 如果两种角色具有相同的等级,那么出现早的策略(相应的角色)就显得更加优先。 更多详情请看 casbin#833、casbin#831

model.conf:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act, eft

[role_definition]
g = _, _

[policy_effect]
e = subjectPriority(p.eft) || deny

[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act 

policy.csv

p, root, data1, read, deny
p, admin, data1, read, deny

p, editor, data1, read, deny
p, subscriber, data1, read, deny

p, jane, data1, read, allow
p, alice, data1, read, allow

g, admin, root

g, editor, admin
g, subscriber, admin

g, jane, editor
g, alice, subscriber 

请求:

jane, data1, read --> true //jane在最底部,所以优先级高于editor, admin 和 root
alice, data1, read --> true

像这样的角色层次结构:

role: root
 └─ role: admin
    ├─ role editor
    │  └─ user: jane
    │
    └─ role: subscriber
       └─ user: john

优先级类似于:

role: root # 自动优先级: 30
 --role: admin# 自动优先级: 20
     --role: editor # 自动优先级: 10
     --role: subscriber # 自动优先级: 10
← 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