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

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

数据库是这样的

[
  {
    "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,其他数据基本上都是信不过的

阅读 2.1k
2 个回答

直接执行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 也不可信哦。


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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题