Restful API开发中不同端的用户请求相同接口中的用户唯一标识判断
原文地址:Restful API开发中不同端的用户请求相同接口中的用户唯一标识判断
在Restful API开发过程中,系统用户分为admin和customer两个用户类型,并且数据库的表是分开的。我们要实现一个系统通知接口,然而两个不同的用户类型请求同一个通知详情接口的时候,使用同一个id会造成目标用户角色混淆。
前提如下:
//通知列表接口
/notifications
//通知详情接口
/notifications/{id}
在notifications/{id}接口中需要更新该用户是否已读该通知,其中是否属于该customer的通知是用customer_id和notification_id来做判断的。
问题:
如果admin请求该接口,那么拿到的当前用户的id是admin的id,如果直接更新该通知为已读,实际上是当前admin读了这条信息,而不是该customer。所以如果系统内不同的用户类型分表,则每个用户的唯一标识符都需要不一样,使用id做为用户标识符会遇到这样的用户标识符混淆的问题。
三种解决方案:
1.不同类型的用户,并且两种用户类型分表,请求同一个通知详情接口,则两种类型的用户标识符不能出现重复。否则会出现上面用户唯一标识符混淆的问题。
2.分端口,例如admin请求的通知详情为 /admin/notifications/{id},customer请求/customer/notifications接口。
3.新增/customer/{id}/notifications/{id},在该接口中更新该用户已读该通知。
4.可以在一个共同的中间件从不同的表中检查否是admin,是否是customer,方法内部可以根据是admin和customer角色来判断权限。如果是admin,则再检查接口权限,customer走的另一个权限检查流程。
{{ nComment.author.nickname }}
{{ nComment.time }}