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

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

一、背景


在日常生活中,遇到的应用系统,都会带有权限功能,用来约束我们访问系统的行为。一个好的权限功能,应该具是动态的、合理的以及安全的。用一句话来描述权限,即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));
        }
    }
相关文章
|
机器学习/深度学习 数据采集 分布式计算
如何实现一个亿的股票模拟盘跟踪
如何实现一个亿的股票模拟盘跟踪
463 0
|
算法 测试技术
EvalPlanner:基于“计划-执行”双阶段的大语言模型评估框架
EvalPlanner是一种创新的大语言模型(LLM)评估算法,采用计划-执行双阶段范式,生成无约束的评估计划并执行,从而提升评估的系统性和可靠性。该系统包含评估计划、计划执行模块和最终判决三个核心组件,通过自训练循环优化计划和执行过程。EvalPlanner在多个基准测试中表现出色,特别是在数据效率和泛化能力方面,为构建高效、稳健的LLM评估模型提供了新方向。
523 13
EvalPlanner:基于“计划-执行”双阶段的大语言模型评估框架
|
Python
pythonSpider_urllib获取豆瓣电影top250信息写入excel
pythonSpider_urllib获取豆瓣电影top250信息写入excel
350 0
|
移动开发 Python Windows
python编程获取网页标题title的几种方法及效果对比(源代码)
python编程获取网页标题title的几种方法及效果对比(源代码)
|
Linux Shell API
在Linux中,如何判断一个进程是否存活,如果不存活,如何告实现警?
在Linux中,如何判断一个进程是否存活,如果不存活,如何告实现警?
|
存储 Linux API
如何经济高效使用云存储网关对接OSS存储
存储网关是一款可以为OSS存储提供文件访问接口的产品,从而用户可以像使用NAS一样在Windows/Linux操作系统里面直接挂载OSS进行使用。众所周知,OSS存储具有多种存储类型。那么对于所有的存储类型,云存储网关是否都适用呢?本文将围绕这一话题,展开一些探讨。
470 0
|
机器学习/深度学习 传感器 人工智能
探索人工智能的未来:机遇与挑战
【8月更文挑战第6天】本文深入探讨了人工智能(AI)的未来发展路径,包括技术进步、应用扩展和伦理法规等方面。文章分析了AI技术在医疗、金融、交通等领域的应用案例,讨论了AI发展过程中可能遇到的技术瓶颈、数据隐私和就业影响等挑战,并提出了相应的解决策略。最后,文章以开放性问题结束,鼓励读者思考如何平衡AI技术的利与弊。
|
机器学习/深度学习 人工智能 自然语言处理
新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等
新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等
新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等
|
SQL 存储 数据管理
数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
679 1