dbeurive/rbac

本包包含基于角色的访问控制(RBAC)的基本实现

1.0.1 2016-07-07 12:17 UTC

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 总是指向一个 数组数组

以下是树形结构的图形表示。

Example

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