架构的核心---权限

来源:互联网 发布:知乎童谣事件文章 编辑:程序博客网 时间:2024/06/06 10:02

一、权限管理综述

通观系统,用户和系统使用范围之间的关系被称作权限,权限是可以被定义的,即是这种关系是可以被定义的,这种关系的对象就是用户和系统使用范围;用户有各种各样的分类,一般是按部门,也可以按属性进行分类;系统使用的范围,一般都有各级菜单,菜单里面是页面,页面上面是操作,操作里面有数据,数据里面有字段等等,粒度越来越细,权限管理越来越精准,可定义,很灵活。


二、普通权限管理回顾

目前比较成熟的权限管理,是用户和菜单甚至到菜单页面动作(action)级别的关系---称之为菜单+操作权限。

普通权限管理就是定义用户和功能之间的关系。

用户:指的是单个用户,也可以是一组用户,这一组用户可以是按部门划分的组,也可以是按群组概念灵活组成的集合。

功能:可以是菜单,菜单中大中小分类,也可以是菜单中的操作,每个操作(button),也可以分为可见(disabled不可click),可读(可以click,不可action),可用。

权限管理就是定义用户和功能之间的关系,这就是普通权限管理,缺陷就是只停留在功能权限管理上,缺少数据权限管理。


三、数据权限之我见

数据权限管理的解决方案五花八门,下面就分析一下数据权限之我见。

数据权限就是在功能权限基础上,对所处理的数据进行范围限定。


数据权限一般分为三种:

A.公开:就是在使用系统功能的基础上,所涉及的数据都是公开的,是全系统可见的,不用做任何限定,这种方式就是传统的普通权限管理,也即是功能权限管理,不涉及数据权限管理的情况。

B.部分公开(或者叫半公开):就是对系统各种功能下,所涉及的数据进行划定范围,并且定义用户和范围的对应关系,这就是数据权限管理。

C.不公开:或者叫私密信息保护,在这种情况下,分为个人私密信息、部分私密信息两种。个人私密信息就是完全不公开,只有自己可见的信息。部分私密信息就是部分范围公开,就是按照个人所在不同范围下的公开。即是个人私密信息,各种组范围私密信息。

注意点:各种组私密信息和部分公开信息的区别在于,各种组私密信息是部分公开在个人所在的各种组范围中;部分公开是公开在特定的各种组范围中。前者是以个人为中心,后者打破了这种限定。


四、数据权限管理实现的方案

定义权限表,也就是关系表。

A.定义角色:角色就是把使用者分组。一个使用者可以进入多个角色。

B.定义功能:功能就是把最小单位的操作任意组合起来,这个“任意”用词不准确,应该有条件地组合在一起,一般是一个菜单,一个一面等。

C.数据作用域:就是功能中的选择器,一般是SQL文的where子句,或者功能的一个子条件。

最后,权限表就产生了,就是A-B+C的关系表,也即角色和B+C的关系表,B+C的意思是,C是依附于B的,C就是所谓的数据权限。


五、方案具体实施

在没有C的情况下,A-B的实现就是普通的菜单权限管理,我们重点说一下数据权限的具体实现。

1.在A-B的基础上,在实现具体功能时,把数据范围作为条件具体化,可定义,可选择

条件库表设计如下:

+---------+------------+----------+------------+-------------+------+

| 功能ID | 功能名称 | 操作ID | 操作名称 | 条件组合 | 备注 |

+---------+------------+----------+------------+-------------+------+

2.实现一个条件组合接口:

public String getCondition(String 条件1,String 条件2,String 条件3,。。。)

3.在操作实现方法里

A.如果是SQL,就可以组合出来where 条件语句

public String whereCause(1,0,1,。。。)

return 条件1+条件3;//1表示此条件生效

。。。。。。


原创粉丝点击