有一个代码的设计问题,大佬们帮帮我

查看 62|回复 4
作者:tongjiann   
简单介绍一下情况。
[ol]
  • 我们是用的是 jdk8+mybatis+MybatisPlus+diboot(小众的 MP 的增强,没看见过可忽略)的后端项目
  • 每个业务表中都有一个 period(会计期间)字段
    [/ol]
    现在有一个 PM 提了一个很容易理解但是很傻逼的 Feature:
    只有管理员开放指定 period 之后,才能对指定 period 的业务表数据进行增删改查(增删改已经做限制,采用下面第二种方法。),否则都不允许(返回空或提示权限不足)
    管理员无视上面一条要求
    初步想法
    [ol]

  • 在所有的查询语句执行前在代码层添加可查询的 period 列表。
  • 比如 select * from table a where id = 'xxx',那就改成 select * from table a where id = 'xxx' and period in (valid_period_list);

  • 对所有的查询出来的数据进行校验。由于增删改单次进行的对象的数据量较小,所以在增删改操作进行前做一次查询取出所有被查询的数据并判断 period ,这样损耗较小,目前可以接受。但是当查询的时候使用系统方法我认为会严重损耗性能。
  • 比如 select * from table a where id = 'xxx'。在查询出数据之后,在代码层进行一次校验,判断 period 是否合理。

    [/ol]
    请问一下大佬们对这个 Feature 有什么比较好的实现经验吗,或者说比较好的 idea
  • cnhongwei   
    用 mybatis 不清楚,用 spring security+spring data jpa 有这个查询增加条件和结果集检查功能,但只是看文档中有,没有实践过,不知道对性能有多少影响。但如果用到 spring security 的话,可以看看 spring security 的文档,在 mybatis 中能不能实现。
    Musong   
    我前端啊,后端不懂。有个小小问题,权限是不是应该在查询之前,在代码逻辑中就给拦截了?(我可完全不懂啊,问错了不要笑话我)
    billbur   
    第一种就行了,数据库没你想象的那么脆弱,一个是要注意覆盖索引,另一个是分页或者说限制一次能查询的数量
    tongjiann
    OP
      
    @cnhongwei #1 好的,感谢
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部