gpt4 book ai didi

php - CakePHP 3.x 基于用户组/组织/团队过滤查询结果

转载 作者:行者123 更新时间:2023-11-30 21:30:33 29 4
gpt4 key购买 nike

我需要确保我的大部分模型查询都根据用户与模型的关系(小组成员、组织、成员、团队成员)返回结果。

在我的应用中:

  1. 有x个组织
  2. 每个组织有 x 名成员

我希望用户创建的数据只有在同一组织内创建时才能访问。

例子:

  1. 列出当前成员相关的所有任务(角色:用户,ManyToMany w/JoinTable)
  2. 列出与同一组织的用户相关的所有任务
  3. 编辑任务时,仅列出属于同一组织的用户
  4. 绝对防止任何深度关联返回与用户组织无关的结果

    class OrganizedBehavior extends Behavior {
    protected $_defaultConfig = [];

    public function beforeFind(Event $event, Query $query, ArrayObject $options) {
    $modelName = $event->getSubject()->getAlias();
    if(isset($options['oid'])) {
    $query->where([$modelName.'.oid' => $options['oid']]);
    }
    return $query;
    }
    }

这可以通过以下方式实现吗:

  1. 整体行为?
  2. 自定义中间件?
  3. 身份验证/授权类?
  4. 还有更好的吗?

最佳答案

这可以通过外部化您的授权和使用第三方框架来实现。实际上有一种称为基于属性的访问控制 () 的体系结构方法可以让您执行此操作。在 ABAC 中:

  • 您定义策略,例如如果 user.organization==object.organization,角色='X' 的用户可以对类型='Y' 的对象执行 action='view'
  • 您定义将在策略中使用的属性,例如角色、部门、地点、组织。

您可以使用一些标准和包来定义自己的策略,例如 XACML、ALFA 或 OPA (REGO)。

整体架构如下:

  • 策略执行点 (PEP):这是您的应用程序与授权服务集成的地方。集成可以是应用程序中调用 PDP 的 PHP 代码,也可以是中间件(如您所说)或 API 网关...
  • 政策决策点 (PDP):这是根据传入的授权请求评估政策的地方。 PDP 最终会返回一个决定(允许/拒绝)和 PEP 需要处理的可选附加元数据。
  • 政策信息点 (PIP):PDP​​ 可以在这里获取缺失的信息(例如用户的风险评分或部门)以做出决定。

此解决方案并非特定于 PHP。有一个特定于 PHP 的实现,您可以 find here .或者考虑 AuthZForce(开源授权服务)或 Axiomatics (商业的)。两者都可以保护 PHP 应用程序以及其他语言。

The Attribute-Based Access Control Architecture

关于php - CakePHP 3.x 基于用户组/组织/团队过滤查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56493831/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com