一种基于主客体模型的权限管理框架
2015-06-09 16:21
218 查看
用户权限体系,在大多数的应用系统中都是需要的。而用户权限体系在不同的应用场景,其适应要求也都有不同。因此,要做一个普适性较好的权限管理系统是非常困难的。 为此,本文提出一种新的权限管理及分配模型,即兼顾通用性,又兼顾应用的个性化。
1.基本概念的抽象
在权限框架中,有用户、角色、组织机构、部门、岗位、菜单、操作、功能等等,甚至组织机构还要分成几个维护,有行政维护、账务维度等等,把这么复杂的模型在一个系统中都实现,会有以下几种情况出现:
a.这个太好了,正是我要的(命中概率约为0)
b.功能还不错,有些设计超出了我的应用范围,但是我有些功能用不上(概率10%)
c.功能都是我要的,有些设计不足,需要进行一些扩展(概率10%)
d.功能有一部分不是我要的,有一部分不满足我要的功能(概率80%)
这也是目前我们的应用现状。
仔细分析上面的一些概念,有且不仅限于上面列出的内容,通过分类,可以划分为两个群体,权限主体和权限客体。
所谓权限主体,就是可以拥有权限的概念,如:用户、角色、岗位、部门、机构等;所为权限客体,就是可以被用来进行权限控制的概念,如:菜单、功能、操作等。
通过抽象权限主体和权限客体,就可以把复杂的权限模型简化成权限主体与权限客体之间的关系。管你有多少种权限主体,不管你有多少权限客体,都在我的圈圈里面,这样适应性自然不是一般的好。
2.权限检查的抽象
实际应用当中,权限检查的方式,也是有许多种情况的,比如:
允许方式 :凡是允许的就可以执行,否则就不可以执行
禁止方式:凡是禁止的就不可以执行,否则就可以执行
允许优先方式:可以有禁止有允许,但是只要有允许就可以被执行
禁止优先方式:可以有禁止有允许,但是只要有禁止就不可以被执行
权限主体可继承方式,就是说权限主体被授权表示其下级的内容可以被授权
权限客体可继承方式,就是说权限客体被授权的内容,代表其下级也被授权
当然,还可以有N种方式,这个熟悉设计模式的同仁一眼就可以看出,这正好可以利用行为模式进行解决。
当项目中的技术经理选择哪种授权模式的时候,只要配置或实现相应的策略即可。
如此,就可以把权限框架中最复杂的两个部分分离抽象出来,你想要什么样的权限模型,需要什么样的授权策略,都可以充分适应。
1.基本概念的抽象
在权限框架中,有用户、角色、组织机构、部门、岗位、菜单、操作、功能等等,甚至组织机构还要分成几个维护,有行政维护、账务维度等等,把这么复杂的模型在一个系统中都实现,会有以下几种情况出现:
a.这个太好了,正是我要的(命中概率约为0)
b.功能还不错,有些设计超出了我的应用范围,但是我有些功能用不上(概率10%)
c.功能都是我要的,有些设计不足,需要进行一些扩展(概率10%)
d.功能有一部分不是我要的,有一部分不满足我要的功能(概率80%)
这也是目前我们的应用现状。
仔细分析上面的一些概念,有且不仅限于上面列出的内容,通过分类,可以划分为两个群体,权限主体和权限客体。
所谓权限主体,就是可以拥有权限的概念,如:用户、角色、岗位、部门、机构等;所为权限客体,就是可以被用来进行权限控制的概念,如:菜单、功能、操作等。
通过抽象权限主体和权限客体,就可以把复杂的权限模型简化成权限主体与权限客体之间的关系。管你有多少种权限主体,不管你有多少权限客体,都在我的圈圈里面,这样适应性自然不是一般的好。
2.权限检查的抽象
实际应用当中,权限检查的方式,也是有许多种情况的,比如:
允许方式 :凡是允许的就可以执行,否则就不可以执行
禁止方式:凡是禁止的就不可以执行,否则就可以执行
允许优先方式:可以有禁止有允许,但是只要有允许就可以被执行
禁止优先方式:可以有禁止有允许,但是只要有禁止就不可以被执行
权限主体可继承方式,就是说权限主体被授权表示其下级的内容可以被授权
权限客体可继承方式,就是说权限客体被授权的内容,代表其下级也被授权
当然,还可以有N种方式,这个熟悉设计模式的同仁一眼就可以看出,这正好可以利用行为模式进行解决。
当项目中的技术经理选择哪种授权模式的时候,只要配置或实现相应的策略即可。
如此,就可以把权限框架中最复杂的两个部分分离抽象出来,你想要什么样的权限模型,需要什么样的授权策略,都可以充分适应。
相关文章推荐
- tomcat内部运行原理浅析
- 超强版SQL无主键分页
- Android 应用添加快捷方式
- acc文件的运行
- servlet+jsp 实现一个简单的web项目
- sudo的使用
- Android设计模式(八)--模板方法模式
- IOS开发获取路径的方法
- 115个Java面试题和答案——终极列表
- 基于业务单元的开发与部署模式
- MDA数据校验规则定义
- 抱怨一发
- 条件熵定义推导公式
- linux_环境变量设置 utf-8
- 对《程序猿故事》的感悟
- 【MongoDB for Java】Java操作MongoDB
- 创建session的方法
- linux java怎么安装
- 构建网络爬虫?so easy
- CMakeLists3