后端数据权限问题,怎么判断权限?
有技术大佬吗,救救孩子吧!
数据库是这样的
[ {
"id": "100",
"name": "data1",
"createUserId": 1
},
{
"id": "101",
"name": "data2",
"createUserId": 2
},
{
"id": "102",
"name": "data3",
"createUserId": 3
},
{
"id": "103",
"name": "data4",
"createUserId": 4
},
{
"id": "104",
"name": "data5",
"createUserId": 4
}
]
如果查询的话就比较简单,每个请求接口的 header 都能够拿到 userId,可以通过 jwt 解密出来
例如是 userId=4,那么查询的时候加上这个判断就可以了,用户 4 只能拿到属于自己的两个数据,id 分别是 103 和 104
但是在修改的时候怎么鉴权,因为要判断这个用户是有权限操作这个数据的,前端给的参数是这样的
{ "id": "103",
"name": "data4-修改的数据",
"createUserId": 4
}
后端为了安全起见,不可能直接就修改了,也不可能拿着 header 的 userId 和 createUserId 字段来对比
因为两个都是前端传过来的,肯定不安全,现在的做法就是拿着 id=103 这个值去调用 get 方法,拿到数据后再用 userId 和 createUserId 来对比
同样删除方法也是这样子做,先查询再判断权限,再后续操作
但是这个感觉很是麻烦,前端那边唯一能够信得过的就是给过来的这个 id,和 header 里面的 userId,其他数据基本上都是信不过的
回答:
直接执行update操作
update 表名set name = #{name}
where id = #{id}
and createUserId = #{userId}
返回值大于0表示更新成功,等于0表示更新失败
回答:
现在的做法就是拿着 id=103 这个值去调用 get 方法,拿到数据后再用 userId 和 createUserId 来对比
你的做法没问题呀,或者 id = {id} and createUserId = {userId}
去 get
或 update
,查询不到就无权限。
前端那边唯一能够信得过的就是给过来的这个 id,和 header 里面的 userId
header 里的 userId
有 jwt 机制保障可信,但是 id
也不可信哦。
权限校验不要怕麻烦,多个地方都使用的话可以封装一个公用函数来做。
以上是 后端数据权限问题,怎么判断权限? 的全部内容, 来源链接: utcz.com/p/944974.html