mimmi20/mezzio-generic-authorization-acl

为 mezzio-generic-authorization 提供了 laminas-permissions-acl 适配器。

3.0.4 2024-09-10 07:41 UTC

README

Latest Stable Version Latest Unstable Version License

代码状态

codecov Test Coverage Average time to resolve an issue Percentage of issues still open Mutation testing badge Maintainability

安装

您可以使用 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.dashboardadmin.posts 路由,编辑访问 admin.publish 路由。因为贡献者从编辑继承了权限,所以它们也将有权访问 admin.publish 路由。因为管理员从贡献者继承了权限,所以他们将有权访问 所有 路由。

您也可以使用配置文件中的 deny 键拒绝资源。例如,您可以在前一个示例中添加以下配置来拒绝管理员对 admin.dashboard 路由的访问

return [
    // ...
    'mezzio-authorization-acl' => [
        // previous configuration array
        'deny' => [
            'administrator' => ['admin.dashboard']
        ]
    ]
]

allowdeny 的使用可以帮助配置复杂的权限场景,包括或排除特定的授权。

如前所述,mezzio-authorization-acl 使用当前路由名称来确定资源。如果您想更改权限类型和授权逻辑,您需要提供 Mezzio\Authorization\AuthorizationInterface 的自定义实现。

mezzio-authorization-acl 使用 laminas-permissions-acl 来实现其访问控制列表(ACL)系统。有关更多信息,我们建议阅读 laminas-acl 文档

许可证

本软件包使用 MIT 许可证进行许可。

请参阅 LICENSE.md