“数据权限”的道和术
一、开头
首先介绍下本文不分语言、不分种族和皮肤,均可观看……
当然最终实现还是以工作语言为例……java…… 哈哈哈
二、背景
总有一些业务想要着要那的,有一天业务跟我说要数据权限,我也没搞过这可咋整?
算了还是先分析一下吧。
数据权限?数据权限是啥子么?要我说就给查询语句增加一个条件呗?
于是我开始幻想,如果我是公司总经理,我应该能看到大家所有的OA数据。
IT经理,可以看到IT所有的数据。
IT小张,只能看到自己的数据。
销售部经理,可以看到销售部所有的权限……
这不就是数据权限了么?
三、道
3.1 数据有主
数据归属的可标识性,权限的前提是“数据有主”。如何让数据按“权限”划分呢?需要把数据增加标识;
(一)部门管理
假设我得组织架构如下,所有的人员都被我安排到部门里面,而我是BOSS.
(二)业务数据
上面只是人员挂在了部门下面,后面所有的OA数据表,都需要记录下来:
① 数据是谁创建的——创建人
② 这个谁是哪个部门的——创建部门
这样我得数据就有了标签,谁的,隶属哪个部门的。
3.2 权限规则
【数据权分配】
由于数据表上存储创建人、创建部门,那么我可以对人员进行数据权限划分。
我嘛如果是总经理,那么给我一个分配开所有权限;
IT经理嘛,那就看部门及以下,IT也就5个人,算了,还是给部门权限就够了。
开发小张,给你分配个人权限;
3.3 数据过滤
“开发小张”查看请假列表,只能看到自己的,因为我会给他拼接SQL。
你咋拼接的?别急,咱们先加装给他拼接上了,无论哪种无非也是一种技术实现而已。
select * from 请加表 where 创建人=小张
我是老板,你不要问我细节,我只管大方向……
数据权限:
1、无非就是你可以看到数据的范围,一般数据存储归属组织、归属个人;
2、用户可以分配的数据权限(个人、某个部门、多个部门等)
3、在SQL执行时,追加上查询条件(当前用户配置的数据权限)
好了,以上三步不就搞定了么?
3.4 古代数据权限?
用古代的统兵权来举例,把士兵当数据,管辖军权的“郡守”只能管理自己的郡,而皇帝则管理全国的郡及兵权。
秦始皇统一天下后,将天下分为三十六郡,每郡设郡守治理。郡中士兵的户籍、粮草、调度权,皆归郡守掌管 —— 但这权力并非无边界。
1. 士兵的 “归属烙印”
所有士兵的军籍文书上,都清晰标注着所属郡名:“上郡士兵”、“陇西郡士兵”、“邯郸郡士兵”
2. 郡守的 “治权之印”
按秦律,郡守只能调动本郡士兵:郡守上任时,会从朝廷领取两样信物:
郡府官印:用于处理郡内行政、粮草调拨等日常事务,是郡守身份的证明;
半枚虎符:虎符是调兵的核心凭证,朝廷将虎符一分为二,左半留郡府,右半由皇帝收藏。
上郡郡守凭官印可查看上郡士兵的名册、粮草;
若需想临时调兵剿匪,需出示左半虎符,与郡尉手中的 “验证符”(郡内辅助调兵的凭证)核对一致,才能调动本郡士兵。
若想调动陇西郡的士兵?那调不动!“上郡”官印和虎符只对 “上郡” 有效。
3. 皇帝的 “全局之权”
秦始皇手中握着全国所有郡的右半虎符,还有一枚 “天下兵枢印”。
凭 “天下兵枢印”,他可以查看任何一郡的士兵名册、粮草数据,无需受 “郡名” 限制;
若需跨郡调兵(如北伐匈奴),他会派使者携带右半虎符,与目标郡的左半虎符 “合符”,验证通过后即可调动该郡士兵。哪怕是最偏远的南海郡士兵,只要皇帝的虎符抵达,便能越过郡守直接调度。
4. 越权的 “红线”
有一次,邯郸郡郡守私下伪造文书,想调用邻近巨鹿郡的士兵。结果文书送到巨鹿郡府时,郡尉一眼看到士兵名册上的 “巨鹿郡” 烙印,再核对邯郸郡守的官印 —— 既无皇帝虎符,又非本郡印记,当场驳回:“非我郡之士,非我印可调!”
四、术
欲知后事如何,请见下回分晓。不装了,我还在加班,我TM要下班了……
如果对你有帮助,点个收藏⭐,点个赞呗……
--------------------------------------------结束--------------------------------------------
参考链接:
ruoyi-vue-plus-权限控制 | 柏竹
插件主体 | MyBatis-Plus