后端数据权限问题,怎么判断权限?

有技术大佬吗,救救孩子吧!

数据库是这样的

[

{

"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}getupdate,查询不到就无权限。

前端那边唯一能够信得过的就是给过来的这个 id,和 header 里面的 userId

header 里的 userId 有 jwt 机制保障可信,但是 id 也不可信哦。


权限校验不要怕麻烦,多个地方都使用的话可以封装一个公用函数来做。

以上是 后端数据权限问题,怎么判断权限? 的全部内容, 来源链接: utcz.com/p/944974.html

回到顶部