Casbin是一个授权库,支持 Java 中的 ACL、RBAC、ABAC 等访问控制模型

1,341 阅读5分钟

项目介绍

Casbin是一个授权库,支持 Java 中的 ACL、RBAC、ABAC 等访问控制模型

正在寻找像 Okta、Auth0、Keycloak 这样的开源身份和访问管理解决方案?了解更多:Casdoor

卡门

新闻:还在为如何编写正确的 jCasbin 策略而烦恼吗?Casbin online editor来帮忙了!试试看:http ://casbin.org/editor/

卡宾标志

jCasbin 是一个强大而高效的 Java 项目开源访问控制库。它支持基于各种访问控制模型执行授权。

目录

支持的机型

  1. ACL(访问控制列表)
  2. 具有超级用户的 ACL
  3. ACL without users:对于没有身份验证或用户登录的系统特别有用。
  4. 没有资源的 ACLwrite-article :某些方案可能通过使用诸如,之类的权限来针对一种资源而不是单个资源read-log。它不控制对特定文章或日志的访问。
  5. RBAC(基于角色的访问控制)
  6. 具有资源角色的 RBAC:用户和资源都可以同时具有角色(或组)。
  7. 带有域/租户的 RBAC:用户可以为不同的域/租户拥有不同的角色集。
  8. ABAC(基于属性的访问控制):语法糖类resource.Owner可用于获取资源的属性。
  9. RESTful:支持路径,如/res/*/res/:id和 HTTP 方法,如GET,POST,PUT,DELETE.
  10. Deny-override:同时支持允许和拒绝授权,拒绝覆盖允许。
  11. 优先级:可以像防火墙规则一样对策略规则进行优先级排序。

这个怎么运作?

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

jCasbin 中最基本、最简单的模型是 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

它的意思是:

  • 爱丽丝可以读取数据1
  • 鲍勃可以写数据2

特征

jCasbin 的作用:

  1. 以您定义的经典{subject, object, action}形式或自定义形式强制执行策略,同时支持允许和拒绝授权。
  2. 处理访问控制模型及其策略的存储。
  3. 管理角色-用户映射和角色-角色映射(也称为 RBAC 中的角色层次结构)。
  4. 支持内置超级用户,如rootor administrator。超级用户可以在没有明确权限的情况下做任何事情。
  5. 多个内置运算符支持规则匹配。例如,keyMatch可以将资源键映射/foo/bar到模式/foo*

jCasbin 不做的事情:

  1. 身份验证(又名验证usernamepassword用户登录时)
  2. 管理用户或角色列表。我相信项目本身管理这些实体会更方便。用户通常有自己的密码,而 jCasbin 并非设计为密码容器。但是,jCasbin 存储了 RBAC 场景的用户角色映射。

安装

对于 Maven:

<dependency>
  <groupId>org.casbin</groupId>
  <artifactId>jcasbin</artifactId>
  <version>1.x.y (replace with latest version)</version>
</dependency>

文档

casbin.org/docs/en/ove…

在线编辑

您还可以使用在线编辑器 ( casbin.org/editor/ ) 在 Web 浏览器中编写您的 jCasbin 模型和策略。它提供诸如syntax highlighting和之类的功能code completion,就像编程语言的 IDE 一样。

教程

casbin.org/docs/en/tut…

开始使用

  1. 使用模型文件和策略文件新建一个 jCasbin 执行器:

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

注意:您也可以在数据库中而不是文件中使用策略初始化实施器,有关详细信息,请参阅策略持久性部分。

  1. 在访问发生之前将强制挂钩添加到您的代码中:

    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 (enforcer.enforce(sub, obj, act) == true) {
        // permit alice to read data1
    } else {
        // deny the request, show an error
    }
    
  2. 除了静态策略文件,jCasbin 还提供了运行时权限管理的 API。例如,您可以获得分配给用户的所有角色,如下所示:

    Roles roles = enforcer.getRoles("alice");
    

有关更多用法,请参阅策略管理 API

  1. 更多用法请参考src/test包。

政策管理

jCasbin 提供了两组 API 来管理权限:

  • 管理 API:为 jCasbin 策略管理提供全面支持的原始 API。有关示例,请参见此处
  • RBAC API:更友好的 RBAC API。此 API 是管理 API 的子集。RBAC 用户可以使用此 API 来简化代码。有关示例,请参见此处

我们还为模型管理和策略管理提供基于Web 的 UI :

模型编辑器

政策编辑

政策持久性

casbin.org/docs/en/ada…

角色经理

casbin.org/docs/en/rol…

例子

模型模型文件政策文件
访问控制列表basic_model.confbasic_policy.csv
具有超级用户的 ACLbasic_model_with_root.confbasic_policy.csv
没有用户的 ACLbasic_model_without_users.confbasic_policy_without_users.csv
没有资源的 ACLbasic_model_without_resources.confbasic_policy_without_resources.csv
RBACrbac_model.confrbac_policy.csv
具有资源角色的 RBACrbac_model_with_resource_roles.confrbac_policy_with_resource_roles.csv
带有域/租户的 RBACrbac_model_with_domains.confrbac_policy_with_domains.csv
ABACabac_model.conf不适用
RESTfulkeymatch_model.confkeymatch_policy.csv
拒绝覆盖rbac_model_with_deny.confrbac_policy_with_deny.csv
优先priority_model.confpriority_policy.csv

中间件

用于 Web 框架的 Authz 中间件:https ://casbin.org/docs/en/middlewares

我们的采用者

casbin.org/docs/en/ado…

Spring Boot 支持

我们提供 Spring Boot 支持,您可以使用casbin-spring-boot-starter在 SpringBoot 中快速开发

在 casbin-spring-boot-starter 中,我们做了如下调整:

  1. 重写JDBCAdapter,支持多种常用的JDBC数据库
  2. 实现 RedisWatcher
  3. IDEA 编辑器配置提示
  4. 提供默认配置,自动组装
  5. SpringSecurity 集成(未来)
  6. Shiro 集成(未来)

github.com/jcasbin/cas…

项目地址:

Github: github.com/casbin/jcas…

本文由博客一文多发平台 OpenWrite 发布!