rbac模型php,php-casbin

PHP-Casbin

quality-score.png?b=master

badge.svg?branch=master

badge.svg

stable

downloads

license

Join%20Chat.svg

好消息: Laravel-authz 现已发布,一个专为Laravel打造的授权库.

PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。

Casbin支持的编程语言:

安装

通过Composer安装:

composer require casbin/casbin

快速开始

通过model和policy文件初始化一个Enforcer实例:

require_once './vendor/autoload.php';

use Casbin\Enforcer;

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

在需要进行访问控制的位置,通过以下代码进行权限验证:

$sub = "alice"; // the user that wants to access a resource.

$obj = "data1"; // the resource that is going to be accessed.

$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

}

目录

支持的Models

ACL without users: especially useful for systems that don't have authentication or user log-ins.

ACL without resources: some scenarios may target for a type of resources instead of an individual resource by using permissions like write-article, read-log. It doesn't control the access to a specific article or log.

RBAC with resource roles: both users and resources can have roles (or groups) at the same time.

RBAC with domains/tenants: users can have different role sets for different domains/tenants.

resource.Owner can be used to get the attribute for a resource.

/res/*, /res/:id and HTTP methods like GET, POST, PUT, DELETE.

Deny-override: both allow and deny authorizations are supported, deny overrides the allow.

Priority: the policy rules can be prioritized like firewall rules.

工作原理

在 Casbin 中, 访问控制模型被抽象为基于 PERM (Policy, Effect, Request, Matcher) 的一个文件。 因此,切换或升级项目的授权机制与修改配置一样简单。 您可以通过组合可用的模型来定制您自己的访问控制模型。 例如,您可以在一个model中获得RBAC角色和ABAC属性,并共享一组policy规则。

Casbin中最基本、最简单的model是ACL。ACL中的Model 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 Model的示例Policy如下:

p, alice, data1, read

p, bob, data2, write

这表示:

alice对data1有读权限

bob对data2有写权限

特性

Casbin 做了什么:

自定义请求的格式,默认的请求格式为{subject, object, action}。

访问控制模型及其策略的存储。

支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。

支持超级用户,如 root 或 Administrator,超级用户可以不受授权策略的约束访问任意资源。

支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*。

Casbin 不做的事情:

身份认证 authentication(即验证用户的用户名、密码),casbin只负责访问控制。应该有其他专门的组件负责身份认证,然后由casbin进行访问控制,二者是相互配合的关系。

管理用户列表或角色列表。 Casbin 认为由项目自身来管理用户、角色列表更为合适, 用户通常有他们的密码,但是 Casbin的设计思想并不是把它作为一个存储密码的容器。 而是存储RBAC方案中用户和角色之间的映射关系。

文档

在线编辑器

你也可以使用在线编辑器(https://casbin.org/editor/) 在你的浏览器里编写Casbin模型和策略。 它提供了一些比如 语法高亮以及代码补全这样的功能,就像编程语言的IDE一样。

教程

Policy管理

Casbin 提供两组 API 来管理权限:

管理API: Casbin的底层原生API,支持全部的策略管理功能。点击 这里 查看更多例子。

RBAC API: 对于RBAC, 是一个更加友好的 API。 此 API 是管理 API 中的一个子集。 RBAC 用户可以使用此 API 来简化代码。 点击 这里 查看更多例子。

同时也提供了一个简单的前端页面来管理Model和Policy:

7ae8358c4462409e92c8bc6027ae2723.png

088628a434baea202811738ca5b6d266.png

Policy持久化

在Casbin中,适配器(adapter,Casbin的中间件)实现了policy规则写入持久层的细节。 Casbin的用户可以调用adapter的loadPolicy()方法从持久层中加载policy规则, 同样也可以调用savePolicy()方法将Policy规则保存到持久层中。 为了保持代码轻量, 我们没有将adapter的代码放在主库中。

以下是PHP-Casbin支持的适配器:(欢迎更多新的第三方贡献的适配器,可以联系我们添加在下面)

Adapter

Type

Author

Description

Database

php-casbin

支持存储到MySQL, PostgreSQL, SQLite, Microsoft SQL Server数据库的适配器

Role管理

角色管理器用于在Casbin中管理RBAC多层角色继承(用户-角色的关系)。角色管理器可以从Casbin的Policy规则或者外部数据源(如LDAP, Okta, Auth0, Azure AD等)获取角色数据。我们支持多种角色管理器,为了保持代码轻量,我们没有将除了内置的默认的角色管理器以外的角色管理器放在主库中。以下是支持的角色管理器:(欢迎更多新的第三方贡献的角色管理器,可以联系我们添加在下面)

Role manager

Author

Description

例子

我们的采用者

Web框架

Laravel: 为WEB艺术家创造的PHP框架, 通过这个扩展: laravel-casbin

Yii PHP Framework: 一个高性能的,适用于开发WEB2.0应用的PHP框架, 通过这个扩展: yii-casbin

CakePHP: 快速、稳定的PHP框架, 通过这个扩展: cake-casbin

ThinkPHP: 一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架, 通过这个扩展: think-casbin

协议

PHP-Casbin 采用 Apache 2.0 license 开源协议发布。

联系

有问题或者功能建议,请联系我们或者提交PR:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值