gpt4 book ai didi

restful-authentication - 具有权限限制字段的 JSON API REST 端点

转载 作者:行者123 更新时间:2023-12-01 04:58:49 24 4
gpt4 key购买 nike

具有权限限制字段的 JSON API REST 端点

我正在开发符合 JSON API 的 REST api。某些端点包含某些用户应限制(只读或不可用)的字段。

构建 api 以允许某些用户访问某些字段而其他用户不能访问的最佳方法是什么? “最好”,我的意思是:

  • 最符合 REST 标准,最好是 JSON API 标准
  • 代表使用 API 的客户在防止错误和混淆方面最清晰

  • 我正在考虑以下选项,每个选项都有其关注点/问题。对于任何其他解决方案,我将不胜感激!

    选项 1:对于没有权限的用户,在受限字段上返回 null
  • 每个用户将返回不同的数据值。这是严格的反 REST 吗?
  • null 表示“空值”和 null 表示“您无权访问此”
  • 之间缺乏区别
  • 在 REST/JSON API 架构中,端点是否可以根据权限为每个用户返回不同的数据?我的印象是这与基于资源的 REST 架构的精神背道而驰,但我在任何文档或标准(例如 JSON API)中都找不到任何具体指向的内容。也适用于选项 2。
  • 是否有任何范例可以在资源的元数据中添加某种“您无权访问”标志?

  • 选项 2:完全排除没有权限的用户的受限字段
  • 每个用户将返回不同的数据值。这是严格的反 REST 吗?
  • 尝试检索字段值时,客户端中可能出现“未定义”错误

  • 选项 3:将受限字段移动到另一个端点,可作为 ?include='field_name' 关系供具有权限的人使用
  • 示例:/api/entity 包含仅对管理员用户可用的属性字段“成本”。管理员用户可以通过 GET/api/entity?include=cost 请求成本数据。对于所有用户,“成本”作为资源对象中的关系公开,具有“类型”和“id”。
  • 这是我倾向于的选项。这里的主要缺点是端点困惑。我有很多关系需要制作成单独的端点,只是为了支持现有端点上的权限隔离数据。
  • 在 JSON API 规范中,我无法确定端点是否可以仅作为关系存在,例如我们可以有/api/entity/1/cost,但是 不是 有一个顶级 api 端点,/api/cost。我的假设是,如果资源具有“类型”(在这种情况下,关系类型为“成本”),它也必须位于顶级端点上。
  • 在这种情况下,如果非管理员用户尝试 GET/api/entity?include=cost 或 GET/api/cost/:id
  • ,客户端可能会收到 401: Unauthorized 错误响应。

    注意:我已经构建了一个单独的权限架构,以便客户端可以在发出任何请求之前根据顶级端点确定用户拥有哪些 CRUD 权限。权限集按资源类型编制索引。

    对此事的任何帮助将不胜感激!如果有什么需要澄清的,请随时提出。

    最佳答案

    我绝对不会使用 undefinednull指示不允许用户查看的字段。对我来说,这感觉就像是在撒谎,代表数据真的不存在。他们必须真正了解您的 API 才能掌握实际情况。

    我会推荐更像你的第三个选项的东西,除了我会把它变成一个完全不同的端点。因此,在您的示例中,端点将是:
    /api/entity/1/cost
    对于管理员
    /api/admin/entity/1/cost
    或类似的东西。

    通过这种方式,您的管理端点的服务器代码可以专注于验证该管理用户并让他们返回他们可以看到的所有字段。如果非管理员用户尝试访问该路由,请使用未经授权的状态代码拒绝他们。

    我并不是说你不应该实现 GET 参数来指定字段。如果你愿意,你可以,但我认为在这种情况下没有必要。

    关于restful-authentication - 具有权限限制字段的 JSON API REST 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34731235/

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