一、概述
用户登录后可获得token,因后端接口没做数据权限校验,技术人员可拿到这个token通过请求工具修改参数去操作他人数据(例如修改库存操作,将库存id改为他人id模拟请求), 原则上所有非列表查询的接口都需做数据鉴权 ,对于saas平台更为必要。
二、具体方案
方式1:
例如取消订单操作,用户拿到订单id后,每次都去数据库进行查询所有权的规则判定(是否本人单据或本店铺单据)
\
方式2:
后端需要数据鉴权的接口增加以下注解 @ValidateDataAccess 自定义拦截器拦截这个注解并解析
采用对称加密的方式,前端请求参数增加 "passKey" (此参数需后端在前置接口中提前返回)
例如取消订单操作,这个接口因为需要做数据鉴权,前端除了传参数订单id外还需传passKey , 这个passKey在订单列表查询时已一并返回,每行订单对应的passKey不同,后端统一在后端做拦截鉴权处理
优点:每次鉴权无需访问数据库,性能高
备注:对于嵌套List的复杂请求对象暂时未做处理,待后续有时间做进一步优化