我有一个实体
Store
,可通过 REST 端点 /api/v1/stores
进行查询。用户只能访问他们有权访问的商店。用户可以是有权配置商店设置的admin
,也可以是可以管理商店订单的manager
。用户也可以两者兼而有之。
从 UI 角度来看,我的应用程序有两个视图,一个管理视图和一个管理视图。在这两个视图中,我想检索仅具有该视图相关权限的商店(即,管理部分仅显示我具有管理员权限的商店,管理视图仅显示我具有管理权限的商店)。
如果我只是从
/api/v1/stores
端点获取商店而不使用显式过滤器,这将返回我可以以任何方式访问的所有商店(即管理员和经理访问权限)。
那么问题是过滤商店以仅返回我感兴趣的商店的最佳实践是什么?
是否应该是一个查询过滤器,例如
/api/v1/stores?filter=permission:admin
?它应该是一个特定于角色的端点(我不是特别喜欢这个想法)?或者有什么更好的吗?
我显然可以在这里实现我想要的任何内容,但我想知道是否有任何标准方法可以通过 UI 定义的权限级别来过滤结果。
我建议类似:
/api/v1/users/{userId}/stores/admin
/api/v1/users/{userId}/stores/management
(您甚至可以将
{userId}
替换为 me
- 见下文)。
我认为不需要过滤器。仅当您要拥有可扩展类型的过滤器参数(即大量且动态)或需要组合应用过滤器时,它才会有用。
您提到用户界面中有两种不同的视图,这对我来说它们是一个定义明确的案例。所以对得起自己的终点。您永远(大概)不需要在同一个调用中访问管理和管理存储,因为它们位于不同的 UI 视图中。
我采用了以用户为中心的端点结构视图,因此很明显,商店仅可供该用户使用。这就是为什么我在它前面放了一个用户词干。
假设您在端点上进行了正确的身份验证,您就已经知道用户 ID。
如果您的用户不需要访问不同用户的数据,那么您可以像这样简化端点:
/api/v1/users/me/stores/admin
/api/v1/users/me/stores/management
...这会保留您稍后添加 {userId} 路径的选项。