PHP 中基于 Casbin 做 RBAC + RESTful 权限控制

简介: PHP-Casbin 是一个支持多种访问控制模型(如RBAC、ABAC、ACL)的高效开源权限管理框架。通过composer安装后,结合数据库适配器,可轻松实现基于角色的权限分配与验证。示例中,`alice`拥有`admin`角色,继承所有权限;`bob`仅拥有`member`角色,权限受限。文章详细介绍了模型配置、策略添加及权限验证方法。

php-casbin.png

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

这里使用官方提供的数据库适配器扩展:Database adapter.

安装

通过composer安装:

composer require casbin/casbin
composer require casbin/dbal-adapter
AI 代码解读

使用 RBAC Model

model.conf 如下:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

#  RBAC角色继承关系的定义
[role_definition]
g = _, _

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

[matchers]
m = g(r.sub, p.sub) && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act)
AI 代码解读

初始化一个Casbin enforcer

use Casbin\Enforcer;
use CasbinAdapter\DBAL\Adapter;

$adapter = Adapter::newAdapter([
    'driver' => 'pdo_mysql',
    'host' => '127.0.0.1',
    'dbname' => 'test',
    'user' => 'root',
    'password' => '',
    'port' => '3306',
]);

$enforcer = new Enforcer('path/to/model.conf', $adapter);
AI 代码解读

添加策略

给alice和bob分配角色:

// alice has the admin role
$enforcer->addRoleForUser('alice', 'admin'); 
// bob has the member role
$enforcer->addRoleForUser('bob', 'member');
AI 代码解读

给member角色分配权限,member 角色仅对foo资源有查看权限:

$enforcer->addPermissionForUser('member', '/foo', 'GET');
$enforcer->addPermissionForUser('member', '/foo/:id', 'GET');
AI 代码解读

admin角色对foo拥有增删改查权限:

// admin inherits all permissions of member
$enforcer->addRoleForUser('admin', 'member');

$enforcer->addPermissionForUser('admin', '/foo', 'POST');
$enforcer->addPermissionForUser('admin', '/foo/:id', 'PUT');
$enforcer->addPermissionForUser('admin', '/foo/:id', 'DELETE');
AI 代码解读

分配完角色和权限后,数据库中的策略规则大致如下:

g, alice, admin
g, bob, member

p, memeber, /foo, GET
p, memeber, /foo/:id, GET

g, admin, member

p, admin, /foo, POST
p, admin, /foo/:id, PUT
p, admin, /foo/:id, DELETE
AI 代码解读

验证权限

alice 具有admin角色,继承adminmember两个角色的全部权限.

$enforcer->enforce('alice', '/foo', 'GET'); // true
$enforcer->enforce('alice', '/foo', 'GET'); // true

$enforcer->enforce('alice', '/foo', 'POST'); // true
$enforcer->enforce('alice', '/foo/1', 'PUT'); // true
$enforcer->enforce('alice', '/foo/1', 'DELETE'); // true
AI 代码解读

bob 具有member角色, 只继承member的权限.

$enforcer->enforce('bob', '/foo', 'GET'); // true
$enforcer->enforce('bob', '/foo', 'GET'); // true

$enforcer->enforce('bob', '/foo', 'POST'); // false
$enforcer->enforce('bob', '/foo/1', 'PUT'); // false
$enforcer->enforce('bob', '/foo/1', 'DELETE'); // false
AI 代码解读

Github:https://github.com/php-casbin/php-casbin

目录
打赏
0
4
6
0
16
分享
相关文章
|
9月前
|
【PHP开发专栏】PHP RESTful API设计与开发
随着互联网技术的发展,前后端分离成为Web开发的主流模式。本文介绍RESTful API的基本概念、设计原则及在PHP中的实现方法。RESTful API是一种轻量级、无状态的接口设计风格,通过HTTP方法(GET、POST、PUT、DELETE)操作资源,使用JSON或XML格式传输数据。在PHP中,通过定义路由、创建控制器、处理HTTP请求和响应等步骤实现RESTful API,并强调了安全性的重要性。
144 2
Spring Boot+Spring Security+JWT 实现 RESTful Api 权限控制
链接网址:https://www.jianshu.com/p/6307c89fe3fa/ 链接网址2:https://blog.csdn.net/linzhiqiang0316/article/details/78358907 jwt介绍:         JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。
4541 0
PHP -Casbin: 支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架
PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架( https://github.com/php-casbin/php-casbin ),目前在 GitHub 开源。PHP-Casbin 采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制 RBAC、基于属性的访问控制 ABAC 等。
4506 0
一个PHP高性能、多并发、restful的工具库(基于multi_curl)
This is high performance curl wrapper written in pure PHP. It's compatible with PHP 5.4+ and HHVM. Notice that libcurl version must be over 7.36.0, otherwise timeout can not suppert decimal. 这是一个高性能的PHP封装的HTTP Restful多线程并发请求库,参考借鉴了httpresful 、multirequest等优秀的代码。
1275 0
PHP再学习5——RESTFul框架 远程控制LED
0.前言       去年(2013年)2月第一次接触yeelink平台,当时该平台已经运行了一些时间也吸引了不少极客。试想自己也将投身IoT(物联网)行业,就花了些时间研究了它。陆陆续续使用和研究了一年,大致围绕两个问题展开——1.yeelink平台如何使用,2.如何构造一个功能简单些的yeelink平台。
1512 0
树莓派学习笔记——Restful服务 采用slim php apache
0.前言     前些时间沉迷于Restful,采用PHP+Slim+MySQL实现了一些简单的API函数。但是这些工作都是在windows中实现(采用wamp server集成安装包),但是转到linux中还确实有些不一样,下面就使用树莓派尝试一把。
1190 0
Guzzle – 构建 RESTful Web 服务的 PHP HTTP 框架
  Guzzle 减轻了发送 HTTP 请求和创建 Web 服务客户端的痛苦。它包含建立一个强大的网络服务客户端的工具,包括:服务描述定义的输入和输出的 API,资源迭代器遍历分页资源,尽可能有效地发送大量的请求。
1096 0
RESTful与GraphQL:电商API接口设计的技术细节与适用场景
本文对比了RESTful与GraphQL这两种主流电商API接口设计方案。RESTful通过资源与HTTP方法定义操作,简单直观但可能引发过度或欠获取数据问题;GraphQL允许客户端精确指定所需字段,提高灵活性和传输效率,但面临深度查询攻击等安全挑战。从性能、灵活性、安全性及适用场景多维度分析,RESTful适合资源导向场景,GraphQL则适用于复杂数据需求。实际开发中需根据业务特点选择合适方案,或结合两者优势,以优化用户体验与系统性能。
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问