谜题石/破壳-acl

一个代理 Laminas ACL 模块

v0.2.0 2020-10-31 13:52 UTC

This package is auto-updated.

Last update: 2024-09-29 05:36:13 UTC


README

一个 Laminas 模块,允许在查询时选择性填充 Laminas ACL

有时你的项目有很多角色、资源和规则。此模块为这些功能提供了插件管理器,并且只请求和加载 ACL 中回答查询所需的最小对象。

安装

此模块使用 composer 进行安装。有关 composer 文档,请参阅 getcomposer.org

composer require riddlestone/brokkr-acl

用法

此模块添加了四个插件管理器,你的模块/项目可以为这些中的任何一个提供配置。

角色管理器

要为 ACL 提供角色,实现 Laminas\ServiceManager\FactoryInterface,然后将您的类添加到 acl_role_manager 配置中

<?php
return [
    'acl_role_manager' => [
        'abstract_factories' => [
            'My\\Factory',
        ],
    ],
];

当 ACL 需要一个角色时,您的工厂将被询问是否能提供它。

角色关系管理器

为了允许项目和模块定义角色之间的关系,角色关系管理器收集有关特定角色的父角色信息。

要提供关于角色的父系信息,实现 RoleRelationshipProviderInterface,并将其注册为 acl_role_relationship_manager 配置中的提供者

<?php
return [
    'acl_role_relationship_manager' => [
        'factories' => [
            'My\\Provider' => 'My\\Provider\\Factory',
        ],
        'providers' => [
            'My\\Provider',
        ],
    ],
];

将提供者与生产它们的工厂分开指定,允许我们使用通过抽象工厂创建的提供者,或者在其他情况下注入到插件管理器中。

资源管理器

要为 ACL 提供资源,实现 Laminas\ServiceManager\FactoryInterface,然后将您的类添加到 acl_resource_manager 配置中

<?php
return [
    'acl_resource_manager' => [
        'abstract_factories' => [
            'My\\Factory',
        ],
    ],
];

当 ACL 需要一个资源时,您的工厂将被询问是否能提供它。

规则管理器

为了允许项目和模块指定权限,规则管理器收集有关哪些规则适用于特定角色和资源的信息。

要提供规则,实现 RuleProviderInterface,并将其注册为 acl_rule_manager 配置中的提供者

<?php
return [
    'acl_rule_manager' => [
        'factories' => [
            'My\\Provider' => 'My\\Provider\\Factory',
        ],
        'providers' => [
            'My\\Provider',
        ],
    ],
];

将提供者与生产它们的工厂分开指定,允许我们使用通过抽象工厂创建的提供者,或者在其他情况下注入到插件管理器中。

查询 ACL

一旦所有管理器都配置好了,您可以通过从 ServiceManager 中拉取它并调用 isAllowed() 来查询 ACL。

<?php
use Laminas\ServiceManager\ServiceManager;
use Riddlestone\Brokkr\Acl\Acl;
/**
 * @var ServiceManager $serviceManager
 */
$acl = $serviceManager->get(Acl::class);
$isAllowed = $acl->isAllowed('some_role', 'a_resource', 'view');