系统权限管理功能设计研究

简介: 系统权限管理功能设计研究

一、背景


在日常生活中,遇到的应用系统,都会带有权限功能,用来约束我们访问系统的行为。一个好的权限功能,应该具是动态的、合理的以及安全的。用一句话来描述权限,即Who(谁)对Which(某个模块)进行How(何种操作)。


权限指的是系统提供的功能和数据。可以看到,权限功能包含功能权限和数据权限


功能权限指的是用户能够执行何种操作,包含对目录、菜单和按钮的操作。

数据权限是的是用户能够访问的数据集。


1666274927146.jpg


权限分配:将资源分配给角色的交互。

角色分配:将角色分配给用户的交互。


在实际业务中,权限和组织部门是息息相关的。用户是某个部门的一员。权限给到用户就是通过部门树的结构进行组织安排

1666274939285.jpg


二、权限级别


一般地,可以将权限级别分为以下五类,基本可以涵盖对数据私密性的管控。

权限类别 权限级别
全部数据权限 1
部门数据及以下权限 2
部门数据权限 3
仅本人数据权限 4
自定义数据权限 #


三、实现权限管理功能的方法


该模块从数据库设计、到数据库CRUD的封装方法,再到真正的实践讲解。


3.1 数据库表设计


3.1.1 数据库表设计字段


在数据库表设计时候,业务表中必须存在部门ID字段和创建者字段,以便后续CRUD操作根据该字段进行过滤数据。

1666274985623.jpg

3.1.2 数据库表字段含义


部门ID字段用于数据权限的识别,创建者字段允许该条记录的创建者能够访问到这条数据。。


3.2 增删改查封装方法


3.2.1 查询封装方法


查询很容易理解,就是动态添加where条件


3.2.2 增加方法


插入操作时候自动拼接 where 等于表达式,如拼接 user_id = ?


3.2.3 修改、删除方法


二者封装操作和增加方法类似


我们可以得到,封装拼接条件都是在执行该类型的方法前进行,统一根据某个字段进行筛选属于某个部门或个人的记录。


3.3 基于ORM 框架的封装

无论使用哪一类ORM框架,是JPA还是Mybatis,都会有解析字符串的的工具函数,利用工具函数进行字段的拼接完成数据权限功能的设计。


Mybatis为例,通过其插件机制对CRUD语句进行封装来开发数据权限功能。


具体到查询语句上来讲,在数据权限拦截器中,处理select语句,


protected void processSelect(Select select, int index, String sql, Object obj) {
        SelectBody selectBody = select.getSelectBody();
        if (selectBody instanceof PlainSelect) {
            this.setWhere((PlainSelect) selectBody, (String) obj);
        } else if (selectBody instanceof SetOperationList) {
            SetOperationList setOperationList = (SetOperationList) selectBody;
            List<SelectBody> selectBodyList = setOperationList.getSelects();
            selectBodyList.forEach(s -> this.setWhere((PlainSelect) s, (String) obj));
        }
    }
相关文章
|
消息中间件 物联网
MQTT常见问题之mqtt 报 MqttException:客户机未连接如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
存储 自然语言处理 算法
2.【Elasticsearch】Elasticsearch从入门到放弃-相关性算法
【Elasticsearch】Elasticsearch从入门到放弃-相关性算法
|
5月前
|
存储 缓存 测试技术
阿里云服务器经济型e实例怎么样?性能、价格与适用场景全解析
阿里云服务器经济型e实例2核2G3M带宽40G ESSD Entry云盘价格只要99元1年,而且续费不涨价。经济型e实例是阿里云面向个人开发者、学生以及小微企业推出的一款入门级云服务器。这款实例以其高性价比和灵活的配置,迅速赢得了市场的青睐。那么,阿里云服务器经济型e实例到底怎么样?是否值得购买呢?本文将为您解析经济型e实例的性能、价格与适用场景,以供参考。
|
移动开发 Python Windows
python编程获取网页标题title的几种方法及效果对比(源代码)
python编程获取网页标题title的几种方法及效果对比(源代码)
|
Linux Shell API
在Linux中,如何判断一个进程是否存活,如果不存活,如何告实现警?
在Linux中,如何判断一个进程是否存活,如果不存活,如何告实现警?
|
机器学习/深度学习 算法
【MATLAB】MPA海洋捕食者算法优化的VMD信号分解算法
【MATLAB】MPA海洋捕食者算法优化的VMD信号分解算法
529 0
【MATLAB】MPA海洋捕食者算法优化的VMD信号分解算法
|
机器学习/深度学习 人工智能 自然语言处理
新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等
新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等
新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等
|
vr&ar 图形学 开发者
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
767 0
|
机器学习/深度学习 存储 自然语言处理
【机器学习】LoRA:大语言模型中低秩自适应分析
【机器学习】LoRA:大语言模型中低秩自适应分析
763 5
pid控制器的工作原理
【2月更文挑战第1天】假设你是一个工厂的工程师,你的工作是控制一个生产过程,这个过程是将材料加热到一定的温度,然后通过一个机器将材料加工成成品。
470 9