数据库权限和角色模型
来源:互联网 发布:程序员在什么系统算 编辑:程序博客网 时间:2024/05/17 19:57
目录(?)[+]
值得注意的是,用户和角色通常不是简单的多对一的关系,有一个用户往往有多个角色,例如:一个操作员被任命为管理员,就具有了员工和管理员这两个角色。3.4
管理域:是一个虚拟的概念,是区分和过滤用户和数据的关键参数。电信中,不同的区号代表不同的范围,一个区号就可以代表一个域,一个域可以代表多个区号。
但是实际应用中,为了更好的扩展性,可以建立管理域模型,定义一定的标准,可以采用分级的管理模式,可以对物理存在的不同的区号数据进行管理。比如:0 代表省中心域,它可以管理全省的各个区号下的数据, 01 代表某某业务域,可以管理几个区号下的数据。
通过管理域这个虚拟的概念,可以关联几个区号进行管理,在逻辑上,通过域可以把这些物理上不同的区号,进行管理起来。对计费来讲,可以方便的区分订购关系、话单等所属的管理域。
对于一个区号,必须隶属一个域。
域是可以分级别的。可以根据具体项目的大小,分成不同的域。对于一个省级别的项目,一般分成2级:省中心域级别和地市级。全国的可以分成3级,全国级别、省中心级别和地市级。
3.5 权限
1. 操作权限:操作权限是对系统操作的约束,主要针对WEB页面发起的请求,基于URL进行权限过滤。
2. 数据权限:数据权限是指针对特定数据实体的数据行级的操作权限,其中包括:增、删、改、查等操作,每一个操作都对应一个细粒度的数据权限,可以通过给角色分配相应的数据权限,使角色具有该项功能。操作权限一般对应于类中(对于struts,就是action中的方法)的方法。
3. 注册权限:把操作权限插入到权限表中。通常是建立两个表:权限目录表、权限表;之间采用1:0..*关系。一个权限目录,对应类,权限对应类中的方法。
注册权限的方法: 一种是,开发专门的工具(录入页面),把相关的权限(方法)输入到数据表中。另外一种是,采用java 5 annotation新特性,开发专门的工具类,在执行函数之前,预先判断是否要注册权限。
3.6 菜单
当用户使用功能或服务时,所操作链接。通常一个菜单对应着一项功能。功能通常包括:增、删、改、查等操作。
菜单的设计为:一级、两级、多级等。通常分成2级,父菜单和子菜单,父菜单对应模块的命名,子菜单对应功能。
菜单库表可以设计为子关联的,方便支持多级菜单模型扩展。也可建立菜单目录表,菜单目录和菜单建立为:1:0..*的关系,一个菜单通常只能隶属于一个菜单目录。
可以设置菜单是否显示,控制用户的功能(权限)。通常的设计方式,用户不能用的功能,把菜单设计为不可见。
3.7 角色和域的关系
对于一个软件系统,一个用户可以拥有多个角色。正如:一个人在社会上担任多个角色类似。
在设计中,角色和域是没有直接关系的,角色决定用户可以使用哪些功能,域决定用户可以操作哪些数据,也就是说角色用来区分权限,域用来区分数据。
3.8 用户、角色、权限和域的关系
系统中角色包含权限,用户对应多个角色,用户只属于一个域。如果一个权限要在某个域上可用,必须指定权限和域的关系。
关于角色和域的关系可以采用下面两种实现方式:
Ø 给角色指定域,这样在不同的域上配置不同的角色。实际上也相当于配置多个角色。
Ø 角色和权限的对应关系加上域属性,即一个角色在某个域上有哪些权限。验证权限时需要加上域属性,现在验证权限时只需要用户和权限标识,加上域属性后验证权限时需要用户+权限标识+域。
3.8.1 两种方式对比
对于第一种方式:
Ø 优点:域、角色、权限三者关系比较清晰,方便数据配置,权限校验时不需要域,实现相对简单
Ø 缺点:按域定义角色会产生很多的角色定义,并且很有可能存在很多的冗余角色。如,A域下的管理员权限和B域下的管理员权限相同,但却需要定义两个管理员角色,多个域的话就会有多个相同的角色。
对于第一种方式:
Ø 好处:避免了产生冗余的角色数据,角色数据管理相对简单;
Ø 缺点:权限数据配置工作变的复杂;相对于第一点实现,权限数据可能会有级数的增加,权限验证性能上可能会受影响;权限验证逻辑也相对复杂了。
3.9 实现方式举例
角色和域关联,但是这个关联,并不是每个域都要定义相同的角色,而是在给角色分配权限的时候,把角色和权限的对应关系加上域的属性,即,角色-权限-域;同时,在角色表中也增加域,即,角色表结构修改为 角色-域。
举例来说,全国01,四川省0101,成都市010101,(汉字后面的数字是每个域的编码)。每个地方都有一个称之为system专员,负责分配权限的;全国的system定义了一个角色: “业务人员”,那么在角色表中就产生一条数据: 业务人员-01;然后四川省和成都市的人,都可以看到父级别的角色,即,都可以看到“业务人员”这个角色。
四川省的system,可以为“业务人员”这个角色分配权限,然后产生的关联数据是 :业务人员-权限-0101 ,只对四川省辖的用户起作用,对别的省不起作用;向下惯行,成都市的业务人员默认的权限也就是他的上级四川省刚刚配置的那个权限。同样,成都市的那个system也可以修改自己管辖的“业务人员”角色的权限,产生的数据是:业务人员-权限-010101。这样成都市的角色就覆盖了上级的角色权限。
如果四川省建立了自己的角色,那么别的省份是看不到的;成都市建立了新的角色,别的地市同样是看不到的。
角色只有只有被分配了权限和管理域后,才具有了行为模式。
角色不是完全共享的,是可以分域的,而这里并不需要每个域都建立相同的冗余角色,根据管理域的分级概念,角色是可以继承的。
对角色的分配权限,也是分域的,可以继承上级的,也可以覆盖上级。
3.10 生活中的实例
1. 政府的区域管理。中央、省、地市、县、镇、村等。
每一个省、地市等,都是区域的划分。与系统中的管理域相对应。
2. 政府的权力管理。总书记、部长、省长、市长、县长、镇长、普通民众等不同的角色。每一个人都需要和一个具体区域相关联,一个区域省长不能管理同级别的其他省或上级区域,仅能管理本省内的事务。
总书记不能对省区域内的事务直接进行管理,他只能命令省长去管理。也就是说,采用系统分层模型。每一层,都有自己的职责。各层完成本层的职责。
4 参考设计模型
4.1 菜单级别权限模型
1. 每一个菜单代表不同功能。
2. 不同的角色进行分配不同的菜单。
3. 存放菜单的表,可以设计为子关联的。
4. 可以对菜单归类,引入菜单目录的概念。一个菜单目录和菜单之间是:1:0..*的关系。
一个中小软件系统的用户权限模型参考实例:
4.2 数据操作级别权限模型
1. 数据权限可以精确到一个功能的增、删、改、查、批量增加、批量删除等操作。
2. 把细粒度的操作,专门的注册到对应的数据库表中。
3. 可以把这些操作级别的权限数据分配给角色。这也是和菜单级别权限模型,最大的区别。该模型控制的粒度更细。
4. 验证用户权限,可以通过专门的过滤器来实现。
一个中小软件系统的用户权限模型参考实例:
4.3 设计技巧
1. 在系统配置文件中,增加是否注册的标识,可以增加灵活性。
2. 在相关表中增加一个version字段(Number),通过它的数字大小来决定程序是否去注册新的权限数据。例如:初时版本是0,随后根据需要依次增加。这样的好处:
a) 当类中(权限组件)增加或修改新的方法(权限),这时需要注册,设置注册权限标识为打开,同时,把这个权限组件的版本进行调整为高数值。就可以方便的更新已有的权限。
b) 不需要删除数据库中已有的权限数据。不需要专门的sql去处理权限数据,降低了工作量。
c) 由于版本的变化,可以方便的跟踪某些权限组件的变化情况。
6 总结和展望
a) 简单的总结前面知识
b) 今后的提高部分
- 数据库权限和角色模型
- 数据库权限和角色模型 .
- 数据库权限和角色模型
- PostgreSQL数据库角色和权限
- 使用数据库定义资源、角色和权限
- 数据库Oracle之用户、角色和权限
- SQLServer中服务器角色和数据库角色权限详解
- SQLServer中服务器角色和数据库角色权限详解
- SQLServer中服务器角色和数据库角色权限详解
- SQL Server中服务器角色和数据库角色权限详解
- SQLServer中服务器角色和数据库角色权限详解
- RBAC 用户 角色 权限 用户组 完整数据库模型方案
- 生成数据库角色权限
- 数据库角色权限
- POSTGRESQL 数据库 角色 权限
- 数据库角色权限设计
- RBAC角色权限模型设计
- RBAC角色权限模型设计
- 程序设计语言的范式
- poj 3613 Cow Relays (floyd快速幂)
- 不让Vim自动生成~备份文件
- 如何将JSON数据通过Get方法获取数据
- 快速搭建节日促销专题
- 数据库权限和角色模型
- MySQL连接字符串总结
- DirectionalViewPager支持横向和纵向的ViewPager
- 继承
- tar命令详解
- Android 应用内存限制
- erlang io format 格式化输出总结
- 11.如何快速进门新技术
- Andriod开发技巧——Fragment的懒加载