我正在寻找有关构造端点的最佳方法的意见,以便多个用户角色可以使用相同的端点。
假设我们有两个用户角色
customer
和admin
,我读到不建议在端点中使用角色类型,例如:
/api/customers/orders/
和 /api/admin/orders/
如果我有一个端点
PUT: /api/orders/{ORDER_ID}/photo-proof
,我知道我应该采用用户经过身份验证的角色,并根据用户拥有的角色执行业务逻辑。 admin
可以更新照片校样图像,而 customer
可以批准或拒绝照片校样。
我的问题是“如果管理员也是有订单的客户怎么办?”如果管理员以管理员身份访问上述端点,则一切正常。但是,如果管理员从客户 UI 访问该端点,并且该端点正在以用户的角色来确定应该运行哪个业务逻辑,那么它将运行不正确的业务逻辑,因为管理员现在是客户并且想要批准或否认自己的照片证明。
希望这是一个有意义的问题。任何指导将不胜感激!
听起来核心问题是:
端点正在以用户的角色来确定应该运行哪个业务逻辑,然后它将运行不正确的业务逻辑,因为管理员现在是客户,并且想要批准或拒绝自己的照片证明。
“运行什么业务逻辑”更好地取决于操作,而不是用户角色。例如,您有 2 个单独的任务:
也许这 2 个操作是 2 个不同的 HTTP 方法,或者如果它们(例如)都是
POST
请求,则您应该检查请求正文以找出操作的意图。
只有在弄清楚用户打算做什么之后,您才应该根据角色确定用户是否允许这样做。