你是怎么设计权限系统的?
凡事都要先问一句:为什么?了解了背景,更容易理解为什么要做这件事。
Q:我们的系统为什么要设计权限系统呢?
A:因为在这个系统中,不同的用户要做的事情不一样。权限的分离可以更好的保证每个用户只做好自己的事情、管好自己的一亩三分地。
Q:那不做权限管理也没有关系啊?让每个用户看到的东西都一样,不是更有利于了解事情的全貌,对这个事情了解地更加深刻吗?何况,就算所有的用户看到的都一样,每个用户还是只点击属于自己的按钮啊,并不会影响什么?
A:首先,没法保证不会有个别用户因为“好奇”不小心在系统里做了别人的事情。其次,不是每个人都愿意了解事情的全貌,很多人都是做好份内之事。最后,不是每个人都有权力知道事情的全貌,作为一个螺丝钉,干好螺丝钉的事情就好,没必要担忧一些莫须有的事情。所以,为了尽量少地污染用户的眼睛,就让每个用户在系统里看到自己该做的事情就好。
Q:我可以理解为:权限系统就是让每个用户做自己的事情吗?
A:Bingo,理解的很到位。
Q:那有那么多用户,一个一个设置权限岂不是要累死了。是不是有个用户分类啥的会好一点。
A:对的。如果系统只有5个用户,一个一个设置权限工作量不大,没啥大问题。但若是有500个用户,还要一个一个设置权限,估计要奔溃了。研发同学不是有一句话嘛,重复性超过10次的工作还是写个脚本吧。所以,存在用户账号的系统,从一开始就考虑是否需要权限管理,后面可以少踩很多坑哦。
在系统里,用户的分类至少要考虑两件事:
- 用户可以分为哪几类?
- 每类用户之间有什么联系。
可以联系公司的组织结构框架理解,可能会更方便一点哦。
Q:那同理,要做的事情是不是也可以这么思考?事情分为哪几类?每类事情之间有什么联系?
A:越来越聪明啦,我再补充一下。
要做的事情至少要考虑三件事:
- 事情分为哪几类?
- 每类事情之间有什么联系?
- 怎么做每类事情?
用户能做什么事情,这个“事情”大多是从业务层面上谈的。在产品设计过程中,我们要把业务流程转化为系统流程。换句话说,在系统里:
- 用户能做什么事情?就可以翻译为:用户能看到哪些按钮或者用户能看到哪些数据。至于究竟是按钮还是数据,是根据产品的类型决定的。
- 事情分为哪几类?就可以翻译为:这些功能之间是否有层级关系,比如一级功能和二级功能等。
- 每类事情之间有什么联系?可以翻译为:每个功能之间的关联关系是什么?
- 怎么做每类事情,可以翻译为:对能看到的按钮或者数据执行什么操作。
Q:是不是还有“用户类型”和“功能/数据”的对应关系啊?不然这独立的两部分也没发用啊。。。
A:是的,必须要有这种对应关系的。
总结一下,权限系统就是解决了用户(who)有权对哪些功能(what)执行哪些(how)操作。
更多请移步RBAC权限管理
— end —