通过用户权限过滤RESTful API中资源的最佳方法是什么?

时间:2017-05-05 07:47:08

标签: rest api oauth scope authorization

假设我们有两种用户,管理员和标准用户。

我们有一个名为post的资源。对于GET方法,我希望管理员查看所有帖子,但标准用户只能看到post.created_by={currentUserID}的帖子。

现在我有三个选择:

  • 使用/api/post/api/mypost。好处是我可以轻松控制返回的结果并根据用户范围分配不同的权限。下面是我将重复代码和文档。

  • 对两者使用/api/post,对于标准用户,如果它没有?createdBy={id},则拒绝该请求。

  • 对两者使用/api/post,但根据身份验证,方法的行为会有所不同。对于标准用户,始终会过滤返回的列表。对于/api/post/{id},它将为不属于用户的帖子返回HTTP 403。

我应该选择哪一个?

1 个答案:

答案 0 :(得分:0)

第一个选项并不理想,因为(如你所说),它很容易出现代码重复。

如果第二个只对currentUserID有意义,那么它也可以起作用。

但是,鉴于您必须以任何方式进行身份验证,我会选择第三种方案,因为它可能是最广泛的解决方案。不同的用户根据他们的权限/组合看到不同的东西,以干净的方式,不会弄乱网址的查询字符串。