PHP|如何写出安全又可靠的PHP脚本( 二 )
这份脚本还不是很完善 , 如你有更好的想法那咱们评论区见 。
二、如何提前设计好类似此种情况1-1 使用脚本刷数据的缺点
- 新员工对业务不熟悉 , 数据刷错后恢复数据工作量更大
- 前期用户基数少没感觉 , 用户量起来后每次执行脚本会花费很长时间
- 用户量大之后MySQL深度分页查询非常慢 , 会人为造成慢查询影响正常用户使用
- 在你刷数据的同时会有新用户注册进来 , 非常容易造成数据库死锁 。
例如你目前的数据数据是这样的 , id、authority_info、name
insert into t values(155)(555)(101010)(151515)(202020)(252525);
脚本执行语句为
update role set authority_info=authority_info+1 where id = 7此条语句为等值查询会退化为间隙锁 , 加锁范围为(510) , 若此时来了一个用户执行语句为
insert into role (888)很遗憾是执行不成功的 。update将(510)的数据加了间隙锁 , 在没有释放锁的情况下 , 这个范围的所有数据是无法添加的 。
当然这种情况仅在无主键索引的情况下会产生 , 因为主键索引的等值查询会退化为行锁 。
总之使用脚本刷数据是百害而无一利的 , 接下来看看如何处理这种情况 。
1-2 应用场景每一家公司注册后 , 默认有几个角色 , 如超管、子管、财务、行政、人事等 ,
所有权限都绑定在相应的角色下 , 使用单条记录方式 。 既然需要添加一个CUI功能模块 , 就需要添加此模块对应的权限 , 默认情况下为所有租户相应的所有角色添加这个权限 。
每一个租户对应角色的权限都存储在角色表中 , 所有
权限信息是在一个json串中存储 , 并切维护了一个更新时间 。那么我们就以获取权限为切入点 , 主系统单独维护一个权限表 , 来看看这个过程是怎样的 。
1-2 方案落地那么如何在这个设计上进行优化 , 确保后期不再使用脚本进行刷数据 , 而是让用户自主触发 。
role表结构数据如下
系统表
系统添加新功能需要设置权限时 , 将权限名以json存储至系统表的auth_info中 , 每次更新权限都添加一条数据 。
用户登录后获取role表的更新时间 , 去系统表中做判断将大于role时间的数据拿出来 , 将查询出来的权限合并到role表中 , 并更新这条记录的更新时间 。
并将新增的权限维护至应用初始化中 , 新注册的用户需将所有的权限给添加上 , 这点根据自身系统看是否需要维护 。1-4 方案弊端此方案虽然解决了每次添加新权限需要执行脚本 , 但不可避免用户每次登录获取权限时都需要使用自身的权限时间跟系统权限时间做比对 。
无形中会多进行一次查询 , 这也是咔咔目前能想到的方案 , 你要是有更好的方案可以探讨一下 。
三、总结本文围绕实际业务进行讨论了脚本如何写、设计缺陷如何后期弥补 , 在脚本中一定要使用正序(防止新用户注册进来)这点相信大家都清楚 。
方案在我看来还不是最优的 , 你要是有更好的思路 , 可以在评论区扩展一下 。
【PHP|如何写出安全又可靠的PHP脚本】坚持学习、坚持写作、坚持分享是咔咔从业以来所秉持的信念 。 愿文章在偌大的互联网上能给你带来一点帮助 , 我是咔咔 , 下期见 。
- 创投圈|抖音小店无货源适合新手小白么?如何精细化运营?新手小白看来
- 松下|淘宝店铺信誉分等级如何提升?
- PHP|如何降低用户关注的非必要页面的权重传递?
- 量子纠缠存在于任何维度空间?人类如何逃出三维空间变成“神”?
- 显卡|如何组装旗舰游戏电脑?这里有你想要的答案
- 火星和地球交换位置会如何?火星会出现生命吗?答案没你想得简单
- 快手视频|视频号和抖音快手的差异化在哪里呢?你应该如何选择适合你的平台
- AirPods|如何进行微信活动运营才有效?
- 酷睿处理器|AMD Zen4如何接招?13代酷睿Z790主板偷跑:DDR4内存还在
- 蓝牙AOA定位那点事系列085:如何应对第一次合作软件开发合作伙伴的问题和需求
