ripaclub/aclman

一个用于管理访问控制列表(ACL)的库

v0.3.0 2017-01-28 13:50 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:13:37 UTC


README

Latest Stable Version Build Status Coverage Status

AclMan是一个PHP库,用于管理访问控制列表(ACL)。

要求

  • PHP >= 5.4

  • Composer

特性

AclMan具有各种特性

  • 断言

    它提供了一个AssertionPluginManager,其目标是提供断言(即AssertionInterface对象)

  • 权限

    包含一个GenericPermission类,它是一个权限选项的容器(例如,一个角色、一个资源、一个特权、一个断言)

  • 资源和角色

    它提供了一套特质,旨在检查资源和角色的有效性,并实例化它们的相关类

  • 存储

    AclMan允许您通过StorageInterface对象和适配器(例如,ArrayAdapter)在多层持久性中保存ACL配置

  • 服务

    一套旨在实例化ACL对象的类

安装

ripaclub/aclman添加到您的composer.json文件中。

{
   "require": {
       "ripaclub/aclman": "~0.2.0"
   }
}

配置

AclMan库只有两个配置节点

  1. aclman_storage用于配置保存ACL规则的持久化层

  2. aclman_services用于配置您的服务(例如,存储和可选的插件管理器)

使用(1)

因此,这是一个使用示例。您首先需要配置工厂。

将此PHP数组放入您的配置文件中。

'abstract_factories' => [
    'AclMan\Service\ServiceFactory',
    'AclMan\Storage\StorageFactory'
],
'factories' => [
    'AclMan\Assertion\AssertionManager' => 'AclMan\Assertion\AssertionManagerFactory'
]

然后我们配置我们的服务。

'aclman_services' => [
    'AclService\Ex1' => [
        'storage' => 'AclStorage\Ex1',
        'plugin_manager' => 'AclMan\Assertion\AssertionManager',
    ],
]
'aclman-assertion-manager' => [
    'invokables' => [
        'assertAlias' => 'assertionClass',
        ...
        ...
    ]
]

最后,我们的存储配置。

'aclman_storage' => [
    'AclStorage\Ex1' => [
        'roles' => [
             // Config specific permission for role Role1 to resources Resource1 and Resource2
            'Role1' => [
                'resources' => [
                    'Resource1' => [
                        [
                            'assert' => null,
                            'allow' => true,
                            'privilege' => 'add'
                        ]
                    ],
                    'Resource2' => [
                        [
                            'assert' => [
                                'assertAlias' => [
                                    'config' => 'test'
                                ],
                            ],
                            'allow' => true,
                            'privilege' => 'view'
                        ]
                    ]
                ],
            ],
            // Config specific permission for all roles to resource Resource1 (e.x public resource)
            StorageInterface::ALL_ROLES => [
                'resources' => [
                    'Resource3' => [
                        [
                            'allow' => true,
                        ]
                    ],
                ]
            ],
            // Config specific permission for Admin to all resource (e.x access to al resource to the admin)
            'Admin' => [
                'resources' => [
                    StorageInterface::ALL_RESOURCES  => [
                        [
                            'allow' => true,
                        ]
                    ],
                ]
            ],
        ],
    ],
]

我们的第一个ACL配置现在已完成。使用它

$aclService1 = $serviceLocator->get('AclService\Ex1');
$aclService1->isAllowed('Role1', 'Resource1', 'view'); // FALSE
$aclService1->isAllowed('Role1', 'Resource1', 'add'); // TRUE
// ...

注意行为...

$aclService1 = $serviceLocator->get('AclService\Ex1');
$aclService1->isAllowed('Role1', 'Resource1', 'add'); // TRUE
$aclService1->isAllowed('Role1', 'Resource2', 'view'); // FALSE
// ...

Analytics