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

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

一、背景


在日常生活中,遇到的应用系统,都会带有权限功能,用来约束我们访问系统的行为。一个好的权限功能,应该具是动态的、合理的以及安全的。用一句话来描述权限,即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));
        }
    }
相关文章
|
缓存 算法 数据库
文档权限管理算法的重要性:提升企业文档管理软件性能
通过文档权限管理算法提高企业文档管理软件性能是一项重要的任务,因为权限管理通常涉及到复杂的数据访问控制和查询操作,对性能有潜在的影响。以下是一些通过文档权限管理算法提高企业文档管理软件的性能的方法——
163 3
|
22天前
|
存储 人工智能 自然语言处理
从“整理”到“思考”:文档管理工具的新角色
在信息爆炸时代,文档管理的挑战转向高效组织和提取知识。传统工具易形成知识孤岛,而语义网络通过内容、上下文和关联性建立知识图谱,使信息“活”起来。开源工具如“板栗看板”采用节点式数据架构,链接文档各部分至具体任务或主题,助力用户在复杂知识网络中自由穿梭,尤其适用于跨学科研究,帮助发现文献间潜在联系,提供全新研究视角。
|
5月前
|
安全 Java 数据安全/隐私保护
构建高效网站后台:权限管理系统设计与实现
【7月更文挑战第5天】在现代Web应用开发中,权限管理是后台系统不可或缺的一部分,它确保了系统的安全性与用户数据的隐私。良好的权限管理系统能够精细控制不同用户角色对功能模块及数据资源的访问权限,从而提升系统的灵活性和安全性。本文将深入探讨权限管理的基本概念、设计思路,并通过一个简单的代码示例展示如何在Web后台中实现基本的权限控制逻辑。
379 2
|
7月前
|
安全 Java 数据库
设计一个简单的权限系统
在Java中构建简单权限系统涉及定义Role和Permission实体,创建User实体关联角色,设计权限分配机制,实现权限检查方法及界面交互。示例代码包括实体类、权限分配服务、安全服务和主函数。实际应用可能需要更复杂的权限控制、动态管理、数据库集成和用户界面。Spring Security等框架可提供全面的安全管理解决方案。【5月更文挑战第3天】
|
安全 数据安全/隐私保护
产品权限分析与设计
产品权限分析与设计
218 0
|
消息中间件 JSON 安全
如何设计权限系统?
如何设计权限系统?
|
安全 Java 数据库
权限管理准备工作|学习笔记
快速学习权限管理准备工作
权限管理准备工作|学习笔记
|
存储 设计模式 缓存
权限管理系统,可以这么设计
权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。对权限做管理的系统,就是权限管理系统。
|
数据库 数据安全/隐私保护 开发者
权限管理-需求分析 | 学习笔记
快速学习 权限管理-需求分析
157 0
|
前端开发 安全 JavaScript
系统权限设计 - 推荐方案
在上篇文章《系统权限设计 - 基本概念和思路》中,介绍了我们在做权限设计的时候需要注意的一些点。
466 0
下一篇
DataWorks