当前位置: 首页 > news >正文

“数据权限”的道和术

一、开头

首先介绍下本文不分语言、不分种族和皮肤,均可观看……

当然最终实现还是以工作语言为例……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

http://www.dtcms.com/a/340072.html

相关文章:

  • 从 SGD 到梯度累积:Epoch、Batch、Step 的关系全解析
  • 使用redis读写锁实现抢券功能
  • Hive 存储管理测试用例设计指南
  • 力扣(最小栈)
  • Android逆向工程:Smali语法解析完整指南
  • [ Maven 开发工具 ] 环境搭建及配置
  • DRM驱动架构浅析-上(DRM基础概要与U-Boot阶段驱动解析)
  • 基于 OpenMV 的矩形识别与 STM32 串口通信(电子设计大赛实用教程)
  • k8s运维实践:高可用Redis Cluster(三主三从)与Proxy部署方案
  • 使用 Docker 安装长安链管理平台 + 部署区块链与示例合约
  • daily notes[3]
  • Eigen中Dense 模块简要介绍和实战应用示例(最小二乘拟合直线、协方差矩阵计算和稀疏求解等)
  • 三极管驱动led灯搭配的电阻选取方法
  • 跟随广州AI导游深度探寻广州历史底蕴​
  • 如何做一次AIMD
  • 农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
  • [OWASP]智能体应用安全保障指南
  • 英伟达显卡驱动怎么更新 详细步骤教程
  • MySQL练习题50题(附带详细教程)
  • Day13_【DataFrame数据组合concat连接】【案例】
  • C5.5:VDB及后面的电路讨论
  • 决策树(2)
  • Yum使用时报错
  • Spring Boot 全局异常处理
  • 快速了解Anaconda系统
  • 08.5【C++ 初阶】实现一个相对完整的日期类--附带源码
  • implement libtime on Windows
  • MyCAT基础概念
  • Python函数总结
  • week2-[一维数组]最大元素