用户权限体系,在大多数的应用系统中都是需要的。而用户权限体系在不同的应用场景,其适应要求也都有不同。因此,要做一个普适性较好的权限管理系统是非常困难的。
为此,本文提出一种新的权限管理及分配模型,即兼顾通用性,又兼顾应用的个性化。
1.基本概念的抽象
在权限框架中,有用户、角色、组织机构、部门、岗位、菜单、操作、功能等等,甚至组织机构还要分成几个维护,有行政维护、账务维度等等,把这么复杂的模型在一个系统中都实现,会有以下几种情况出现:
a.这个太好了,正是我要的(命中概率约为0)
b.功能还不错,有些设计超出了我的应用范围,但是我有些功能用不上(概率10%)
c.功能都是我要的,有些设计不足,需要进行一些扩展(概率10%)
d.功能有一部分不是我要的,有一部分不满足我要的功能(概率80%)
这也是目前我们的应用现状。
仔细分析上面的一些概念,有且不仅限于上面列出的内容,通过分类,可以划分为两个群体,权限主体和权限客体。
所谓权限主体,就是可以拥有权限的概念,如:用户、角色、岗位、部门、机构等;所为权限客体,就是可以被用来进行权限控制的概念,如:菜单、功能、操作等。
通过抽象权限主体和权限客体,就可以把复杂的权限模型简化成权限主体与权限客体之间的关系。管你有多少种权限主体,不管你有多少权限客体,都在我的圈圈里面,这样适应性自然不是一般的好。
2.权限检查的抽象
实际应用当中,权限检查的方式,也是有许多种情况的,比如:
允许方式 :凡是允许的就可以执行,否则就不可以执行
禁止方式:凡是禁止的就不可以执行,否则就可以执行
允许优先方式:可以有禁止有允许,但是只要有允许就可以被执行
禁止优先方式:可以有禁止有允许,但是只要有禁止就不可以被执行
权限主体可继承方式,就是说权限主体被授权表示其下级的内容可以被授权
权限客体可继承方式,就是说权限客体被授权的内容,代表其下级也被授权
当然,还可以有N种方式,这个熟悉设计模式的同仁一眼就可以看出,这正好可以利用行为模式进行解决。
当项目中的技术经理选择哪种授权模式的时候,只要配置或实现相应的策略即可。
如此,就可以把权限框架中最复杂的两个部分分离抽象出来,你想要什么样的权限模型,需要什么样的授权策略,都可以充分适应。