得,今天跟大家聊聊我最近在项目里搞的“史坦尼斯”模块。
需求丢过来的时候,我就一脸懵。啥是“史坦尼斯”? 后来才知道,这名字是项目里自己起的,实际上就是个权限管理模块,负责控制用户对不同功能的访问权限。可能取这名字的人是《权力的游戏》的粉丝,毕竟史坦尼斯也是个狠角色。
拿到需求,先是啃文档。文档写得那叫一个“简洁”,很多细节都没说清楚。没办法,只能一边啃一边猜。我先理一下思路,这玩意儿说白就是:
1. 要有个地方存用户有哪些权限。
2. 得有个机制来判断用户有没有权限访问某个功能。
3. 最好能动态配置,别每次改个权限都要重启服务。
想清楚这几点,就开始撸代码。
搞个数据库表,专门用来存用户权限。表里字段大概就是:用户ID、功能ID、权限类型(读、写、执行啥的)。 这表结构设计的时候也纠结一下,考虑到以后可能会有更复杂的权限需求,就预留几个扩展字段,方便以后升级。
写个权限验证的函数。这个函数接收两个参数:用户ID和功能ID。然后,它就去数据库里查,看看这个用户对这个功能有没有对应的权限。 查到,就返回true,没查到就返回false。 这个函数是核心,必须得保证效率,所以加缓存。用户权限信息变动不频繁,可以缓存一段时间,减少数据库压力。
然后就是动态配置的问题。 我用个配置文件,把所有的功能都定义在里面,每个功能都有个唯一的ID。 这样,新增功能或者修改功能权限,只需要改配置文件就行,不用改代码。为让配置生效,还搞个定时任务,定期读取配置文件,更新缓存。
差不多搞定之后,开始测试。 各种情况都测一遍,包括:
用户有权限的情况
用户没权限的情况
权限配置变更的情况
测的过程中,发现几个小bug,改改,总算跑通。
把代码提交到代码仓库,让同事code review一下,提几个意见,改改,就合并到主干。
整个过程,从一脸懵逼到勉强能用,也算是趟过来。 做这个“史坦尼斯”模块,最重要的就是理清思路,把需求拆解成几个小块,然后各个击破。 还有就是测试,一定要充分测试,才能保证代码的质量。
还没有评论,来说两句吧...