dbeurive / rbac
本包包含基于角色的访问控制(RBAC)的基本实现
1.0.1
2016-07-07 12:17 UTC
Requires
This package is not auto-updated.
Last update: 2024-09-20 19:14:41 UTC
README
本包包含基于角色的访问控制(RBAC)机制的基本实现。
请注意,基于角色的访问控制(RBAC)与访问控制列表(ACL)不同。
一般而言
- 访问控制列表(ACL)指定了哪些用户有权访问资源,以及允许对特定资源执行的操作。例如,如果一个资源有一个包含(Alice: read,write; Bob: read)的ACL,这将授予Alice读取和写入文件的权限,而Bob只有读取权限。
- 基于角色的访问控制(RBAC)是一种限制系统访问的授权用户的方法。在基于角色的访问控制中,角色层次结构定义了角色之间的继承关系。高级角色包含子角色拥有的权限。
请注意,由于高级角色包含子角色的权限,因此基于角色的访问控制不适用于管理个人对资源的所有权。
安装
从命令行
composer require dbeurive/rbac
或者,从你的文件 composer.json
中
"require": {
"dbeurive/rbac": "*"
}
摘要
use dbeurive\Rbac\RolesHierarchy; // Specify the hierarchy of roles using the builder $hierarchy = new RolesHierarchy("super-admin"); $hierarchy ->addSubRole("admin") ->addSubRole("admin-bouygues") ->addSubRole("user-bouygues") ->up() ->up() ->addSubRole("admin-orange") ->addSubRole("user-orange") ->up() ->up() ->up() ->addSubRole("other-admin"); // Test a given role. if ($hierarchy->canAccessResource("super-admin", "admin")) { // "super-user" can access resources managed by "admin". }
请注意,你也可以通过数组指定层次结构
$hierarchy = array( 'role' => 'super-admin', 'access' => array( array( 'role' => 'admin', 'access' => array( array( 'role' => 'admin-bouygues', 'access' => array( array( 'role' => 'user-bouygues', 'access' => array() ) ) ) ) ), array( 'role' => 'admin-orange', 'access' => array( array( 'role' => 'user-orange', 'access' => array() ) ) ), array( 'role' => 'other-admin', 'access' => array() ) ) ); $this->__hierarchyArray = new RolesHierarchy($hierarchy);
注意:键
access
总是指向一个 数组数组。
以下是树形结构的图形表示。
API 概览
construct($inHierarchyOrTopRole)
构建新的角色层次结构。
$inHierarchyOrTopRole
参数可以是字符串或数组。
- 如果
$inHierarchyOrTopRole
是字符串:它表示层次结构顶部的角色名称。 - 如果
$inHierarchyOrTopRole
是数组:它表示整个层次结构。
addSubRole($inRole)
向当前级别以下添加一个角色。当前级别变为新添加的子级别。
up()
从当前角色向上返回一个级别。
canAccessResource($inRole, $inOtherRole)
测试给定角色($inRole
)是否可以访问由其他角色($inOtherRole
)管理的资源。
如果角色 $inRole
可以访问由其他角色($inOtherRole
)管理的资源,则该方法返回值 true
。否则返回值 false
。
cmp($inRole, $inOtherRole)
比较两个角色在层次结构中的位置。
- 如果
$inRole
在$inOtherRole
"之上",则方法返回值 +1。 - 如果
$inRole
和$inOtherRole
相同,则方法返回值 0。 - 如果
$inOtherRole
在$inRole
"之下",则方法返回值 -1。
toDot()
生成角色的层次结构的GraphViz表示。
该方法返回表示树形结构的DOT表示的字符串。
假设你将此字符串存储在文件 tree.dot
中,然后你可以使用以下命令获取树的图形表示
dot -Tgif -Ograph tree.dot