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

一: 应用场景:
            在实际应用中,数据权限的控制点一般相对固定,如针对公司、部门、个人、客户、供应商等,也就是说数据权限一般针对指定数据类型下的一些数据对象。
    例如:某公司有北京生产部、上海生产部和保定生产部,现在需要定义几种角色:
    总部总监         -- 能察看所有生产部的产品;
    北京生产部经理 -- 只能察看北京生产部的所有产品;
    上海 生产部经理 -- 只能察看 上海生产部的所有产品;
     保定 生产部经理 -- 只能察看 保定生产部的所有产品;
二:角色定义:
  上述角色的定义如下:
     -------------------------------------------------------------------
     角色名称                      功能             数据类型       数据对象  
     -------------------------------------------------------------------
       总部总监                   察看 产品                                 
       北京生产部经理         察看 产品         部门              北京  
       上海生产部经理         察看 产品         部门              上海     
        保定生产部经理        察看 产品单      部门              保定   
     -------------------------------------------------------------------
 
        上述定义中,销售总监只定义了功能权限,而没有定义数据权限,所以销售总监能够察看所有的产品;而其他几位经理分别定义了这一功能的数据权限,所以只能察看指定部门的产品。
 
         在实际应用中,往往会出现部门分组,组长能够察看本组所有人员处理的 产品的情况,以及某些情况下,某些人只能察看本人的 产品的情况,这些特殊情况在上述的说明中无法解决,需要在设计和实现中进行处理。
 
三:通用数据权限管理系统设计
 
        我们先来看看传统的基于角色的权限管理系统,如下图所示,最简单的基于角色的权限管理由系统功能、系统角色、系统用户、角色功能和用户角色五部分组成。
通用数据权限管理系统设计_第1张图片
    图一:基于角色的数据库结构
为实现数据权限控制,在设计上对基于角色的权限管理进行扩充,如下图所示:
通用数据权限管理系统设计_第2张图片
 
图二:通用数据权限管理系统数据库设计
对比两张图,我们可以看到,他们之间的主要变化为:
1、 增加系统资源信息和操作类型信息,系统资源为树形结构、如销售模块、销售订单等;操作类型记录可能的操作,如增加、删除、修改、查看、查询等,系统功能是资源与操作类型的组合,对资源的操作就是系统功能。
2、 增加数据对象类型和数据对象两张表,数据对象类型记录系统中需要控制的对象类型,如部门、库房、员工、客户、供应商等;数据对象记录各对象类型的对象实例,如北京销售部、上海销售部、张三、李四等等。(独立保存的好处后面会说到)
3、 增加系统资源与数据对象类型的关联表(多对多),本表为配置表,说明某种资源可能需要的控制点,如销售订单与部门类型的关联可能涉及到分部门分配权限;销售订单与客户的关联可能涉及到按客户分配权限等等。
4、 增加数据对象与角色权限的关联,这张表是真正最终实现数据权限管理的所在地。
       通过这种设计,能够最小化地减少对原有权限系统的更改,并且可以很灵活地增加数据的控制点。在产品化软件的设计中使用,能够灵活满足客户的需要。

你可能感兴趣的:(权限设计)