REST API中相同资源的不同更新权限

时间:2014-10-24 13:03:29

标签: api rest permissions

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

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

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

API支持通过PATCH或POST或其他任何方式对资源进行部分更新(对问题不重要)。如果员工尝试更新salary(他没有权限),那么适当的回复是什么?我看到了几个选项,我不确定最合理的方法是什么:

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

  • 回复403 Forbidden。 这似乎不太正确,因为员工确实有权修改资源,而不是他试图修改的所有字段。

  • 回复400错误请求。 这似乎不太正确,因为请求实际上并不坏,只是"坏"对于这个用户。

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

这样的更新不应该被允许部分成功,所以最好的回复是403 Forbidden,并解释原因,如果这不是安全问题。