【问题标题】:Different update permissions of same resource in REST APIREST API 中同一资源的不同更新权限
【发布时间】:2014-10-24 13:03:28
【问题描述】:

假设我在 REST API 中有一个简单的“员工”资源:

{
    "employee_id": "1234ABCD",
    "name": "John Doe",
    "title": "Developer",
    "salary": 50000
}

员工和经理都有权读取整个资源。经理有权更新所有资源的属性,但员工只有更新name 属性的权限。

API 支持通过 PATCH 或 POST 或其他方式(对问题不重要)对资源进行部分更新。如果员工尝试更新salary(他无权这样做),那么适当的响应是什么?我看到了一些选项,但我不确定最合理的方法是什么:

  • 忽略更新中他无权修改的任何字段并返回 200 响应。 这似乎不太正确,因为 API 说“好的,我做到了”,而实际上它并没有更新它被告知要更新的所有内容。

  • 以 403 禁止响应。 这似乎不太正确,因为员工确实有权修改资源,而不是他试图修改的所有字段。

  • 响应 400 错误请求。 这似乎不太正确,因为请求实际上并不坏,只是对这个用户“不好”。

  • 其他一些我没有考虑过的回应?

在这种情况下最好的反应是什么?

【问题讨论】:

    标签: api rest permissions


    【解决方案1】:

    403 Forbidden 状态码表示服务器理解请求并且授权凭据有效,但不充分。情况似乎如此。

    无论如何都不应该允许这样的更新部分成功,所以最好的回复是403 Forbidden,并说明原因,如果这不是安全问题的话。

    【讨论】:

      【解决方案2】:

      1) 请记住,员工只是在您的软件中“按下一个按钮”。因此,您必须根据适合您的(客户端)软件的业务逻辑做出决定。例如,您可以返回 403 + 正文,其中包含每个字段的错误列表。

      2) 您的客户端软件不应允许员工做员工不应该做的事情。这意味着,如果员工没有权限,他/她将永远没有机会编辑薪水。

      所以 403 是最合乎逻辑的决定,因为本质上它是软件错误,而不是用户的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-18
        • 2022-07-26
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        相关资源
        最近更新 更多