mimmi20 / mezzio-generic-authorization
为 Mezzio 和 PSR-7 应用提供授权中间件。
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0
- mezzio/mezzio-authentication: ^1.9.0
- mezzio/mezzio-router: ^3.17.0
- psr/container: ^1.1.2 || ^2.0.2
- psr/http-factory: ^1.1.0
- psr/http-message: ^1.0.1 || ^2.0
- psr/http-server-handler: ^1.0.2
- psr/http-server-middleware: ^1.0.2
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: ^4.1.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.1
- 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
- mimmi20/mezzio-generic-authorization-acl: provides a laminas-permissions-acl-backed adapter
- mimmi20/mezzio-generic-authorization-rbac: provides a laminas-permissions-rbac-backed adapter
Conflicts
README
代码状态
安装
您可以使用 Composer 安装 mezzio-generic-authorization 库。
composer require mimmi20/mezzio-generic-authorization
简介
此组件为 Mezzio 和 PSR-7 应用提供中间件,根据 ACL 或 RBAC 系统授权特定路由。
与 mezzio-authorization 不同,此库默认不要求 ServerRequestInterface
。这使得可以与 mezzio-navigation 结合使用。
如果使用提供的中间件,则使用 路由名称 作为资源。
授权系统首先需要进行认证:为了验证一个身份是否有权访问某些东西(即是否被授权),我们首先需要 身份,它是在认证过程中提供的。
认证通过 mezzio-authentication 包提供。该库提供了一个 AuthenticationMiddleware
类,它使用 HTTP 请求验证凭据,并通过 PSR-7 请求属性 存储身份。
mezzio-authentication 生成的身份存储为请求属性 Mezzio\Authentication\UserInterface
的 UserInterface
实现。该接口如下所示
namespace Mezzio\Authentication; interface UserInterface { /** * Get the unique user identity (id, username, email address or ...) */ public function getIdentity() : string; /** * Get all user roles * * @return Iterable */ public function getRoles() : iterable; /** * Get a detail $name if present, $default otherwise */ public function getDetail(string $name, $default = null); /** * Get all the details, if any */ public function getDetails() : array; }
mezzio-generic-authorization 消费此身份属性。它检查用户角色(从 UserInterface
对象获取)是否被授权(允许)执行当前 HTTP 请求。
使用 AuthorizationInterface
的 isGranted()
方法执行授权。
public function isGranted(?string $role = null, ?string $resource = null, ?string $privilege = null, ?\Psr\Http\Message\ServerRequestInterface\ServerRequestInterface $request = null): bool;
有两个适配器可用
- mezzio-generic-authorization-rbac,实现了基于角色的访问控制 (RBAC)
- mezzio-generic-authorization-acl,实现了访问控制列表 (ACL)
如果您想了解更多关于使用中间件进行 PHP 认证的信息,我们建议阅读博客文章"使用中间件授权用户"。
授权适配器
您可以通过服务容器配置配置要使用的授权适配器。具体来说,您可以将服务名称 Mimmi20\Mezzio\GenericAuthorization\AuthorizationInterface
映射到工厂,或者将其别名为适当的服务。
例如,使用 Mezzio 容器配置,您可以选择以下任一方式选择 mezzio-authorization-acl 适配器
-
使用别名
use Mimmi20\Mezzio\GenericAuthorization\AuthorizationInterface; use Mimmi20\Mezzio\GenericAuthorization\Acl\LaminasAcl; return [ 'dependencies' => [ // Using an alias: 'aliases' => [ AuthorizationInterface::class => LaminasAcl::class, ], ], ];
-
映射到工厂
use Mimmi20\Mezzio\GenericAuthorization\AuthorizationInterface; use Mimmi20\Mezzio\GenericAuthorization\Acl\LaminasAclFactory; return [ 'dependencies' => [ // Using a factory: 'factories' => [ AuthorizationInterface::class => LaminasAclFactory::class, ], ], ];
我们提供了两种不同的适配器。
- RBAC适配器由mezzio-generic-authorization-rbac提供。
- ACL适配器由mezzio-generic-authorization-acl提供。
每个适配器都可以通过Composer安装。
composer require mimmi20/mezzio-generic-authorization-rbac
# or
composer require mimmi20/mezzio-generic-authorization-acl
许可证
本软件包使用MIT许可证授权。
请参阅LICENSE.md
。