项目介绍
Casbin是一个授权库,支持 Java 中的 ACL、RBAC、ABAC 等访问控制模型
正在寻找像 Okta、Auth0、Keycloak 这样的开源身份和访问管理解决方案?了解更多:Casdoor
新闻:还在为如何编写正确的 jCasbin 策略而烦恼吗?Casbin online editor来帮忙了!试试看:http ://casbin.org/editor/
jCasbin 是一个强大而高效的 Java 项目开源访问控制库。它支持基于各种访问控制模型执行授权。
目录
支持的机型
- ACL(访问控制列表)
- 具有超级用户的 ACL
- ACL without users:对于没有身份验证或用户登录的系统特别有用。
- 没有资源的 ACL
write-article:某些方案可能通过使用诸如,之类的权限来针对一种资源而不是单个资源read-log。它不控制对特定文章或日志的访问。 - RBAC(基于角色的访问控制)
- 具有资源角色的 RBAC:用户和资源都可以同时具有角色(或组)。
- 带有域/租户的 RBAC:用户可以为不同的域/租户拥有不同的角色集。
- ABAC(基于属性的访问控制):语法糖类
resource.Owner可用于获取资源的属性。 - RESTful:支持路径,如
/res/*,/res/:id和 HTTP 方法,如GET,POST,PUT,DELETE. - Deny-override:同时支持允许和拒绝授权,拒绝覆盖允许。
- 优先级:可以像防火墙规则一样对策略规则进行优先级排序。
这个怎么运作?
在 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 的作用:
- 以您定义的经典
{subject, object, action}形式或自定义形式强制执行策略,同时支持允许和拒绝授权。 - 处理访问控制模型及其策略的存储。
- 管理角色-用户映射和角色-角色映射(也称为 RBAC 中的角色层次结构)。
- 支持内置超级用户,如
rootoradministrator。超级用户可以在没有明确权限的情况下做任何事情。 - 多个内置运算符支持规则匹配。例如,
keyMatch可以将资源键映射/foo/bar到模式/foo*。
jCasbin 不做的事情:
- 身份验证(又名验证
username和password用户登录时) - 管理用户或角色列表。我相信项目本身管理这些实体会更方便。用户通常有自己的密码,而 jCasbin 并非设计为密码容器。但是,jCasbin 存储了 RBAC 场景的用户角色映射。
安装
对于 Maven:
<dependency>
<groupId>org.casbin</groupId>
<artifactId>jcasbin</artifactId>
<version>1.x.y (replace with latest version)</version>
</dependency>
文档
在线编辑
您还可以使用在线编辑器 ( casbin.org/editor/ ) 在 Web 浏览器中编写您的 jCasbin 模型和策略。它提供诸如syntax highlighting和之类的功能code completion,就像编程语言的 IDE 一样。
教程
开始使用
-
使用模型文件和策略文件新建一个 jCasbin 执行器:
Enforcer enforcer = new Enforcer("path/to/model.conf", "path/to/policy.csv");
注意:您也可以在数据库中而不是文件中使用策略初始化实施器,有关详细信息,请参阅策略持久性部分。
-
在访问发生之前将强制挂钩添加到您的代码中:
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 } -
除了静态策略文件,jCasbin 还提供了运行时权限管理的 API。例如,您可以获得分配给用户的所有角色,如下所示:
Roles roles = enforcer.getRoles("alice");
有关更多用法,请参阅策略管理 API。
- 更多用法请参考src/test包。
政策管理
jCasbin 提供了两组 API 来管理权限:
- 管理 API:为 jCasbin 策略管理提供全面支持的原始 API。有关示例,请参见此处。
- RBAC API:更友好的 RBAC API。此 API 是管理 API 的子集。RBAC 用户可以使用此 API 来简化代码。有关示例,请参见此处。
我们还为模型管理和策略管理提供基于Web 的 UI :


政策持久性
角色经理
例子
中间件
用于 Web 框架的 Authz 中间件:https ://casbin.org/docs/en/middlewares
我们的采用者
Spring Boot 支持
我们提供 Spring Boot 支持,您可以使用casbin-spring-boot-starter在 SpringBoot 中快速开发
在 casbin-spring-boot-starter 中,我们做了如下调整:
- 重写JDBCAdapter,支持多种常用的JDBC数据库
- 实现 RedisWatcher
- IDEA 编辑器配置提示
- 提供默认配置,自动组装
- SpringSecurity 集成(未来)
- Shiro 集成(未来)
项目地址:
Github: github.com/casbin/jcas…
本文由博客一文多发平台 OpenWrite 发布!

