1
我有以下REST资源:如何为缺失资源建模权限?
/companies
返回公司的名单/companies/{id}
回报的公司状态/companies/{id}/departments
返回所有的部门在公司/employee/{id}/departments
返回部门雇员的作品在/departments/{id}
返回部门状态
需要注意的是,部门知道其关联公司和员工,但其URI不包含此信息。如果部门不存在,则无法知道曾经与之相关联的公司/员工(或者资源是否曾经存在)。为了争辩,你应该认为部门URI方案不太可能会改变(这是一个很长的故事)。
/companies
资源具有关联的query
权限令牌。当客户引用不存在的公司/companies/{id}
时,我检查他们是否有权访问query
。如果他们这样做,我会返回HTTP 404 ("Not Found")
,否则我会返回HTTP 403 ("Forbidden")
到目前为止这么好。当客户端引用不存在的/departments/{id}
资源时会出现问题。由于该部门不存在,我无法弄清楚它与哪个公司和query
权限令牌关联。
我们似乎又回到了经典usability/security tradeoff:
- 假设每个人都知道资源是否存在(返回指示出了什么问题一个明确的错误消息),或 权提高可用性
- 如果资源丢失或权限被拒绝(返回含糊的错误消息以隐藏资源是否存在或权限被定义),通过返回模糊的错误代码来提高安全性。
还有别的办法吗?