2017-05-05 17 views
1

假设我们有两种用户,管理员和标准用户。通过用户权限筛选RESTful API中的资源的最佳方式是什么?

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

现在我有三个选项:

  • 使用/api/post/api/mypost。上面是我可以很容易地控制返回的结果,并根据用户范围分配不同的权限。缺点是我会重复这些代码和文档。

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

  • 对于两者都使用/api/post,但该方法的行为会因认证而异。对于标准用户,返回的列表总是被过滤。对于/api/post/{id},它将为不属于用户的帖子返回HTTP 403。

我应该选择哪一个?

回答

0

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

如果第二个不只是当前用户标识有意义,它也可以工作。

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

0

基本上没有差别,它只是路由:/api/post/api/mypost/api/post/{id} = /api/post/{createdBy} = /api/post?createdby={id}。您甚至可以仅为管理员添加管理员区域。

但是,有一条规则适用于所有选项:管理员具有完全访问权限,而普通用户只能访问他们自己的帖子。

如果指定了Id,但未找到匹配的帖子,则为管理员和用户返回“未找到”。

我应该选择哪一个?

这不是由我自己决定的。这取决于你的设计。

您的代码必须维护,因此应以逻辑(或功能)方式构建您的应用程序。至于冗余代码,请尝试使用(通用)函数,扩展或'HelperClasses'并使用存储库。

相关问题