getpop/access-control

模式元素访问控制

5.0.0 2024-09-07 03:33 UTC

README

模式元素访问控制

安装

通过 Composer

composer require getpop/access-control

开发

源代码托管在 GatoGraphQL monorepo 中,位于 Engine/packages/access-control

使用方法

初始化组件

\PoP\Root\App::stockAndInitializeModuleClasses([([
    \PoP\AccessControl\Module::class,
]);

它如何工作?

访问控制以两种模式进行:公共/私有模式。

公共和私有模式之间的区别在于当验证失败时提供给用户的反馈。在公共模式下,向用户提供详细的错误消息(例如:“只有具有'管理员'角色的用户可以访问此字段”)。在私有模式下,没有有用的信息,而是告诉用户该字段或指令不存在。

我们需要实现 4 种访问控制情况

  1. 公共模式中的字段
  2. 公共模式中的指令
  3. 私有模式中的字段
  4. 私有模式中的指令

在公共模式中,我们可以简单地添加一个特殊的指令来验证限制(例如:用户是否已登录?登录用户是否有特定的角色或能力?)。

在私有模式下,我们在注册之前添加一个钩子来过滤字段或指令。

此外,每当必须执行验证以确定用户是否可以访问字段或指令时,GraphQL 服务器的响应不能被缓存(当使用组件 Cache Control)。对于公共模式,这种情况会自动处理,因为验证用户是否登录的指令已经表明响应不能被缓存。然而,对于私有模式,我们需要添加一个特殊的指令 "NoCache"。因此,我们需要处理以下两种情况

  1. 私有模式中字段的 NoCache
  2. 私有模式中指令的 NoCache

PHP 版本

要求

  • 开发:PHP 8.1+
  • 生产:PHP 7.2+

支持的 PHP 功能

请查看 GatoGraphQL/GatoGraphQL 中的支持 PHP 功能列表

预览降级到 PHP 7.2

通过 Rector(dry-run 模式)

composer preview-code-downgrade

标准

PSR-1PSR-4PSR-12

要检查编码标准,请使用 PHP CodeSniffer 运行

composer check-style

要自动修复问题,请运行

composer fix-style

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

测试

要执行 PHPUnit,请运行

composer test

静态分析

要执行 PHPStan,请运行

composer analyse

报告问题

要报告错误或请求新功能,请访问GatoGraphQL 单一代码仓库问题跟踪器

贡献

我们欢迎您在GatoGraphQL 单一代码仓库(该包的源代码托管处)为此包做出贡献。

请参阅贡献指南行为准则以获取详细信息。

安全

如果您发现任何与安全相关的问题,请通过电子邮件leo@getpop.org联系,而不是使用问题跟踪器。

致谢

许可证

GNU 通用公共许可证 v2(或更高版本)。有关更多信息,请参阅许可证文件