我们应该使用哪个HttpStatus代码来进行权限检查?

问题描述 投票:0回答:1

我们有一个端点来检查用户是否有权访问某个文档:

GET /document/{documentId}/permits

请求正文:

{ "permission": "WRITE" }

当用户对文档具有 WRITE 权限时,他将得到以下响应:

200 OK
{ "isPermitted": true }

问题是,当用户没有对文档的写权限时,我们应该使用哪个 HttpStatus 代码?应该是200还是403?

200 OK
{ "isPermitted": false }

403 Forbidden
{ "isPermitted": false }

状态码200的原因是因为权限检查本身并没有被禁止,禁止的是对文档的实际操作(即WRITE)。

状态码403的原因是因为它用于表示禁止用户进行WRITE访问。简而言之,状态代码证实了响应正文。

在这种情况下我们应该使用哪个状态代码?请告知并说明理由。

rest http http-status-code-403 http-status-codes http-status-code-200
1个回答
0
投票

问题是,当用户没有对文档的写权限时,我们应该使用哪个 HttpStatus 代码?应该是200还是403?

理想情况下 - 200。 HTTP 状态代码是“网络上文档传输”域中的元数据;它通知通用客户端尝试获取资源的当前表示已成功,并且响应负载是资源的当前表示。 不涉及资源表示的领域语义;您询问文档内容,服务器能够为您找到答案,因此状态代码 200 是合适的。文件内容说“否”的事实与此设计决策无关。

在实践中

,人们使用状态代码来传达领域重要信息是很常见的。例如,Consul期望 HTTP 健康检查将使用 HTTP 响应的状态代码传达粗粒度状态(健康、警告、不健康)。这在 REST 中是 100% 的错误,因为它违反了统一接口约束;但它“很好”,因为它在大多数时间都有效,而且我们实际上只关心无论如何都利用带外信息的定制客户。

请注意,
403

适用于服务器拒绝请求的情况,这就是当您使用该状态代码时通用 HTTP 组件将假设正在发生的情况。 403 实际上意味着您不能询问许可证是什么。

© www.soinside.com 2019 - 2024. All rights reserved.