对REST资源的权限

对REST资源的权限,rest,permissions,Rest,Permissions,我正在编写一组rest服务,在一些参考资料中,我正在处理以下情况。例如: 使用资源: /文章 用户可以创建文章,用户不能删除任何文章。用户可以获得他们创建的所有文章的列表(get/articles),但看不到其他用户的文章。将有一组特殊的“管理员”用户,他们有足够的权限查看或删除任何文章 我认为有两种方法可以做到这一点: 如本例所示,只有一个端点,并在服务的POST、GET和DELETE代码中处理权限 使用不同的端点/admin/articles,使用单独的实现,并在验证之后和服务代码之前处理

我正在编写一组rest服务,在一些参考资料中,我正在处理以下情况。例如:

使用资源:

/文章

用户可以创建文章,用户不能删除任何文章。用户可以获得他们创建的所有文章的列表(get/articles),但看不到其他用户的文章。将有一组特殊的“管理员”用户,他们有足够的权限查看或删除任何文章

我认为有两种方法可以做到这一点:

  • 如本例所示,只有一个端点,并在服务的POST、GET和DELETE代码中处理权限

  • 使用不同的端点/admin/articles,使用单独的实现,并在验证之后和服务代码之前处理权限


您认为/cleaner/RESTfullish哪个更好?

如果两个用户可以创建具有相同标识符的文章,那么它就更“干净”,更容易在更深层次(如文件系统)上表示它们

/{username}/articles


如果他们都在同一个用户空间中创建文章,那么每资源授权就更充分了。

我会选择第1种方法-具有相同的端点,原因如下:

  • 更干净,更容易理解
  • 更容易维护-假设您将来有更多的角色。这将强制为您添加的每个角色创建更多端点
  • 松耦合。通过使用这种方法,您可以将应用程序的授权问题与API本身分离
  • 无论如何,您必须检查代码本身中的授权,以检查客户端是否调用了未经授权的资源,这样您就不会使用第二种方法来真正保存任何内容

  • 我不能谈论“RESTfully”,但由于您使用的是相同的资源,至少部分操作相同,权限不同,所以我觉得分离端点有点奇怪/文章普通用户将在该资源上通过帖子添加文章。如果管理员用户必须能够在特定的用户名称空间中编写文章(模拟其他用户),该怎么办。在单独的/admin/articles服务中,在用户空间o上发布此消息是否更好?您可以将其视为模拟,但/{username}只不过是管理员用户具有写入权限的位置。执行操作的用户的身份通过身份验证头等其他方式处理。如果管理员需要编写自己的文章,那么他们可以像普通用户一样工作。