mimmi20 / mezzio-generic-authorization-acl
为 mezzio-generic-authorization 提供了 laminas-permissions-acl 适配器。
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0
- laminas/laminas-permissions-acl: ^2.16.0
- mimmi20/mezzio-generic-authorization: ^3.0.6
- psr/container: ^1.1.2 || ^2.0.2
- psr/http-message: ^1.0.1 || ^2.0
Requires (Dev)
- ext-ctype: *
- ext-dom: *
- ext-simplexml: *
- ext-tokenizer: *
- ext-xml: *
- ext-xmlwriter: *
- infection/infection: ^0.27.11 || ^0.28.1
- laminas/laminas-servicemanager: ^3.22.1 || ^4.0.0
- mimmi20/coding-standard: ^5.2.43
- nikic/php-parser: ^4.19.1 || ^5.0.2
- phpstan/extension-installer: ^1.4.3
- phpstan/phpstan: ^1.12.3
- phpstan/phpstan-deprecation-rules: ^1.2.0
- phpstan/phpstan-phpunit: ^1.4.0
- phpunit/phpunit: ^10.5.26
- rector/rector: ^1.2.5
- rector/type-perfect: ^0.2.0
- symplify/phpstan-rules: ^13.0.1
- tomasvotruba/cognitive-complexity: ^0.2.3
- tomasvotruba/type-coverage: ^0.3.1
- tomasvotruba/unused-public: ^0.3.11
Suggests
- laminas/laminas-servicemanager: to use the factories
Conflicts
README
代码状态
安装
您可以使用 Composer 安装 mezzio-generic-authorization-acl 库
composer require mimmi20/mezzio-generic-authorization-acl
简介
此组件为 访问控制列表 (ACL) 授权抽象提供了对 mezzio-generic-authorization 库的支持。
ACL 是基于 资源 和 角色 的概念构建的
- 一个 资源 是一个受控访问的对象;
- 一个 角色 是一个可以请求访问资源的对象。
简单来说,角色请求访问资源。例如,如果一位停车场管理员请求访问一辆车,那么停车场管理员就是请求角色,而车就是资源,因为并非每个人都有权访问车。
通过指定和使用 ACL,应用程序可以控制角色如何获得对资源的访问权限。例如,在 Web 应用程序中,一个 资源 可以是一个页面、视图的一部分、路由等。一个 角色 可以根据请求的上下文而变化:它可以是 API 请求中发送的客户端标识;用户是 匿名访客 还是网站的 注册用户 等。
配置 ACL 系统
您可以使用以下配置文件提供您的 ACL 定义
// config/autoload/authorization.local.php return [ // ... 'mezzio-authorization-acl' => [ 'roles' => [ 'editor' => [], 'contributor' => ['editor'], 'administrator' => ['contributor'], ], 'resources' => [ 'admin.dashboard', 'admin.posts', 'admin.publish', 'admin.settings' ], 'allow' => [ 'administrator' => ['admin.settings'], 'contributor' => [ 'admin.dashboard', 'admin.posts', ], 'editor' => [ 'admin.publish' ] ] ] ];
我们在 mezzio-authorization-rbac 的文档中使用相同的示例,以便您可以进行比较和对比这两个系统。
上述配置为博客网站定义了三个角色:一个 编辑、一个 贡献者 和一个 管理员。贡献者角色将编辑角色作为子角色,这意味着它继承了其功能。管理员角色将贡献者角色作为子角色,继承其直接功能和继承的任何功能。
在 ACL 系统中,父角色继承其子角色的权限。
在 mezzio-authorization-acl 中,资源 被映射到当前请求的 路由名称。默认情况下,所有资源都拒绝访问,除非另有说明。在我们的示例中,我们允许管理员访问 admin.settings
路由,贡献者访问 admin.dashboard
和 admin.posts
路由,编辑访问 admin.publish
路由。因为贡献者从编辑继承了权限,所以它们也将有权访问 admin.publish
路由。因为管理员从贡献者继承了权限,所以他们将有权访问 所有 路由。
您也可以使用配置文件中的 deny
键拒绝资源。例如,您可以在前一个示例中添加以下配置来拒绝管理员对 admin.dashboard
路由的访问
return [ // ... 'mezzio-authorization-acl' => [ // previous configuration array 'deny' => [ 'administrator' => ['admin.dashboard'] ] ] ]
allow
和 deny
的使用可以帮助配置复杂的权限场景,包括或排除特定的授权。
如前所述,mezzio-authorization-acl 使用当前路由名称来确定资源。如果您想更改权限类型和授权逻辑,您需要提供 Mezzio\Authorization\AuthorizationInterface
的自定义实现。
mezzio-authorization-acl 使用 laminas-permissions-acl 来实现其访问控制列表(ACL)系统。有关更多信息,我们建议阅读 laminas-acl 文档。
许可证
本软件包使用 MIT 许可证进行许可。
请参阅 LICENSE.md
。