PHP用Casbin做RBAC和RESTful权限控制的方法
本篇内容介绍了“PHP用Casbin做RBAC和RESTful权限控制的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联公司专注于邵东网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供邵东营销型网站建设,邵东网站制作、邵东网页设计、邵东网站官网定制、微信平台小程序开发服务,打造邵东网络公司原创品牌,更为您提供邵东网站排名全网营销落地服务。
PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型(RBAC
ABAC
ACL
)的权限管理。
这里使用官方提供的数据库适配器扩展:DBAL Adapter.
安装
通过composer
安装:
composer require casbin/casbin composer require casbin/dbal-adapter
使用 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) && keyMatch3(r.obj, p.obj) && regexMatch(r.act, p.act)
初始化一个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);
添加策略
给alice和bob分配角色:
// alice has the admin role $enforcer->addRoleForUser('alice', 'admin'); // bob has the member role $enforcer->addRoleForUser('bob', 'member');
给member角色分配权限,member
角色仅对foo
资源有查看权限:
$enforcer->addPermissionForUser('member', '/foo', 'GET'); $enforcer->addPermissionForUser('member', '/foo/:id', 'GET');
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');
分配完角色和权限后,数据库中的策略规则大致如下:
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
验证权限
alice
具有admin
角色,继承admin
和member
两个角色的全部权限.
$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
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
“PHP用Casbin做RBAC和RESTful权限控制的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
本文标题:PHP用Casbin做RBAC和RESTful权限控制的方法
标题路径:http://scjbc.cn/article/jgcojc.html