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

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

一、背景


在日常生活中,遇到的应用系统,都会带有权限功能,用来约束我们访问系统的行为。一个好的权限功能,应该具是动态的、合理的以及安全的。用一句话来描述权限,即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));
        }
    }
相关文章
|
2月前
|
云安全 存储 监控
管理员应了解的 SIEM解决方案七大功能 !
SIEM 解决方案可以增强企业的整体安全态势,但重要的是使解决方案的功能与企业的安全需求相匹配。此外,重要的是要了解解决方案的核心功能,以有效检测和防御网络攻击。
|
13天前
|
存储 人工智能 自然语言处理
从“整理”到“思考”:文档管理工具的新角色
在信息爆炸时代,文档管理的挑战转向高效组织和提取知识。传统工具易形成知识孤岛,而语义网络通过内容、上下文和关联性建立知识图谱,使信息“活”起来。开源工具如“板栗看板”采用节点式数据架构,链接文档各部分至具体任务或主题,助力用户在复杂知识网络中自由穿梭,尤其适用于跨学科研究,帮助发现文献间潜在联系,提供全新研究视角。
|
6月前
|
敏捷开发 测试技术 持续交付
探索式测试在软件质量保证中的角色与实践
【6月更文挑战第18天】探索式测试,一种灵活且高效的软件测试方法,正逐渐改变传统测试流程的面貌。本文将深入探讨探索式测试的核心概念、实施策略及其在现代软件开发生命周期中的应用价值。通过案例分析与实证研究,揭示探索式测试如何提升测试覆盖率,增强团队协作,并促进持续集成与交付。最终,文章旨在为读者提供一套实用的探索式测试框架,以支持其在软件质量保证活动中的有效运用。
39 3
|
6月前
|
监控 安全 Java
老程序员分享:JeeSite快速开发平台、功能介绍、用户权限、数据权限、系统管理
老程序员分享:JeeSite快速开发平台、功能介绍、用户权限、数据权限、系统管理
183 0
|
7月前
|
运维 监控
平台设计-用户权限体系
首先需要知道一些约束:
|
安全 数据安全/隐私保护
产品权限分析与设计
产品权限分析与设计
217 0
|
存储 SQL 缓存
用户系统设计
注册、登录、查询、用户信息修改,哪个需求量最大? 支持100M DAU。注册,登录,信息修改 QPS 约 100M * 0.1 / 86400 ~ 100 0.1 = 平均每个用户每天登录+注册+信息修改 Peak = 100 * 3 = 300
202 0
|
存储 设计模式 缓存
权限管理系统,可以这么设计
权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。对权限做管理的系统,就是权限管理系统。
|
前端开发 安全 JavaScript
系统权限设计 - 推荐方案
在上篇文章《系统权限设计 - 基本概念和思路》中,介绍了我们在做权限设计的时候需要注意的一些点。
465 0