通用数据权限管理系统设计

一: 应用场景:

在实际应用中,数据权限的控制点一般相对固定,如针对公司、部门、个人、客户、供应商等,也就是说数据权限一般针对指定数据类型下的一些数据对象。

例如:某公司有北京生产部、上海生产部和保定生产部,现在需要定义几种角色:

总部总监         -- 能察看所有生产部的产品;

北京生产部经理 -- 只能察看北京生产部的所有产品;

上海生产部经理 -- 只能察看上海生产部的所有产品;

保定生产部经理 -- 只能察看保定生产部的所有产品;

二:角色定义:

上述角色的定义如下:

-------------------------------------------------------------------

角色名称                      功能             数据类型       数据对象

-------------------------------------------------------------------

总部总监                   察看产品

北京生产部经理         察看产品         部门              北京

上海生产部经理         察看产品         部门              上海

保定生产部经理        察看产品单      部门              保定

-------------------------------------------------------------------

上述定义中,销售总监只定义了功能权限,而没有定义数据权限,所以销售总监能够察看所有的产品;而其他几位经理分别定义了这一功能的数据权限,所以只能察看指定部门的产品。

在实际应用中,往往会出现部门分组,组长能够察看本组所有人员处理的产品的情况,以及某些情况下,某些人只能察看本人的产品的情况,这些特殊情况在上述的说明中无法解决,需要在设计和实现中进行处理。

三:通用数据权限管理系统设计

我们先来看看传统的基于角色的权限管理系统,如下图所示,最简单的基于角色的权限管理由系统功能、系统角色、系统用户、角色功能和用户角色五部分组成。

图一:基于角色的数据库结构

为实现数据权限控制,在设计上对基于角色的权限管理进行扩充,如下图所示:

图二:通用数据权限管理系统数据库设计

对比两张图,我们可以看到,他们之间的主要变化为:

1、 增加系统资源信息和操作类型信息,系统资源为树形结构、如销售模块、销售订单等;操作类型记录可能的操作,如增加、删除、修改、查看、查询等,系统功能是资源与操作类型的组合,对资源的操作就是系统功能。

2、 增加数据对象类型和数据对象两张表,数据对象类型记录系统中需要控制的对象类型,如部门、库房、员工、客户、供应商等;数据对象记录各对象类型的对象实例,如北京销售部、上海销售部、张三、李四等等。(独立保存的好处后面会说到)

3、 增加系统资源与数据对象类型的关联表(多对多),本表为配置表,说明某种资源可能需要的控制点,如销售订单与部门类型的关联可能涉及到分部门分配权限;销售订单与客户的关联可能涉及到按客户分配权限等等。

4、 增加数据对象与角色权限的关联,这张表是真正最终实现数据权限管理的所在地。

通过这种设计,能够最小化地减少对原有权限系统的更改,并且可以很灵活地增加数据的控制点。在产品化软件的设计中使用,能够灵活满足客户的需要。

时间: 2024-08-05 18:43:16

通用数据权限管理系统设计的相关文章

[Django]用户权限学习系列之设计自有权限管理系统设计思路

若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ-LQJ/p/5604331.html 现在步入正题,这篇文章是关于自有权限管理系统设计的思路描述,自有权限管理系统是抛弃django自带的后台管理界面,基于自己编写的权限管理界面对用户权限的管理! 首先上图:(自己设计的权限系统界面,代码将后续文章中写出) 权限管理界面主要是添加和删除权限,查看官方

大数据权限管理工具 Apache Ranger 初识

资料参考: Apache Ranger – Introduction http://ranger.apache.org/ 阿里云 Ranger简介 Apache Ranger初识 - 阿里云 大数据权限管理利器 - Ranger Ranger初始用 原文地址:https://www.cnblogs.com/shujuxiong/p/10244119.html

通用数据权限的思考与设计

1 数据权限概述 1.1 什么是数据权限? 数据权限是指对系统用户进行数据资源可见性的控制,通俗的解释就是:`符合某条件的用户只能看到该条件下对应的数据资源`.那么最简单的数据权限大概就是:用户只能看到自己的数据.而在正式的系统环境中,会有很多更为复杂的数据权限需求场景,如: 领导需要看到所有下属员工的客户数据,员工只能看自己的客户数据: 经理A能看到所有企业客户,经理B只能看到年销售额小于1000万的企业客户: 角色A能看到全国的产品数据,角色B只能看到上海的产品数据: 上述这些需求,使用硬编

通用数据权限设计思维概述

1.数据权限概述 1.1 什么是数据权限? 数据权限是指对系统用户进行数据资源可见性的控制,通俗的解释就是:只有符合条件的用户才能看到该条件下对应的数据资源.举个简单的例子: 本组织的销售人员只能看见本组织的客户信息. 某专职会计只能看见A部门及其下级部门的单据. 上述这些需求,使用硬编码也是可以实现的,但是在业务快速发展的过程中,类似这种数据权限需求会越来越多,如果全部采用硬编码的方式,无疑会给我们带来巨大的开发和维护压力. 1.2 要素分析 从数据权限的解释来看,只有符合条件的用户才能看到该

通用权限管理设计

权限设计(初稿)     1. 前言:     权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.     2. 目标:     直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统

系统权限管理设计 (转)

权限设计(初稿)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.      2. 目标:      直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统解

系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555) 1. 前言: 权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案. 2. 目标: 直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重

java web简单权限管理设计

一套最基本的权限管理包括用户.角色.资源. 数据库设计 我的设计如下: 用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单.子菜单.按钮等资源) 角色-资源:role_resource 标准的权限管理系统设计为以上5张表. 注:用户.用户-角色我就不做说明了,这两个是很简单的两块,用户的crud,以及为用户分配角色(多对多的关系)稍微琢磨一下就清楚了,下面都是针对为角色分配权限的实现 后台实现 展示层采用ztree树 <%@ page conte

开源干货!!!.NET Core + Vue.js(iview-admin) 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!

DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯,是古希腊神话中的众神之王,奥林匹斯十二主神之首,统治宇宙万物的至高无上的主神(在古希腊神话中主神专指宙斯),人们常用"众神和人类的父亲"."神王"来称呼他,是希腊神话诸神中最伟大的神. DncZeus的愿景就是做一个.NET Core 领域的简易精致的通用后台权限管理模