1.背景
提出一个问题:只做接口功能菜单权限检验还不够,还得做数据权限检验才行,举个例子:用户A有删除某条数据的接口权限,这个接口的参数是传记录id来删除的(ps:平时我们开发接口也是这么做的),后端执行的逻辑就是通过登录信息通过用户认证,然后再判断接口菜单权限,紧接着就执行如下SQL逻辑:
delete from table where id=?
这里的id就是掉接口传递的参数,这时候假如用户B知道了怎么调接口,就根据id自增长的特性随意传id,就会删掉别人的数据,所以这是一个严重的问题,要解决这问题可以像上面说的一样加上数据权限,执行逻辑如下:
delete from table where id=? and user_id = userId
这样就避免数据被别人操作了,也就是加上了数据权限判断,但是却给业务逻辑增加了复杂性同时老接口业务逻辑难以适配,本质上来说web页面上看到的数据就是根据用户角色做过数据隔离的,可以这么理解你能看到哪些数据和你有那些功能菜单操作权限就差不多避免上面所说的情况了,但是保不准懂代码的人使用postman等工具恶意调接口而产生上面的情况,这个问题可以转换为怎么避免