您好,登錄后才能下訂單哦!
本篇內容介紹了“PHP用Casbin做RBAC和RESTful權限控制的方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
PHP-Casbin 是一個強大的、高效的開源訪問控制框架,它支持基于各種訪問控制模型(RBAC
ABAC
ACL
)的權限管理。
這里使用官方提供的數據庫適配器擴展:DBAL Adapter.
通過composer
安裝:
composer require casbin/casbin composer require casbin/dbal-adapter
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)
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權限控制的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。