新浪网友问了2个问题:
1.业务流程中流程变革时,你的系统该怎么适应。
2.如何完成不同系统中的权限统一管理。
一,第一个问题
1.业务流程中流程变革时,你的系统该怎么适应。
简答:如果是权限发生变化,打开设计器编辑权限逻辑即可,无需修改业务代码,无需重启应用。
1,分析
软件系统完成一个业务,一般有如下要件组成:界面-->服务器-->界面。
服务器端完成工作可以分为两类:
- 做权限判断,比如判断角色,对业务数据和当前用户之间关系进行细粒度权限判断等;
- 做业务操作,将数据同步到数据库,触发相关服务等。比如修改某张表字段,触发短信模块发送新消息。
当然,一个业务流程,服务器端可能要做多个业务操作,可能也要做多个权限判断。比如:将数据先写入表A,然后将数据写入表B,然后更新表C相关数据。
现在,我们来给权限做个划分:什么是权限的最小单元?也就是什么情况下可以成一个权限,什么情况下又必须做为多个权限来定义?
先看如下代码:
if( SecurityService.permit( currentUser, currentData, "insertTableA" ) {
DAO.insertTableA( data1 );
}
if( SecurityService.permit( currentUser, currentData, "insertTableB" ) {
DAO.insertTableB( data2 );
}
if( SecurityService.permit( currentUser, currentData, "updateTableC" ) {
DAO.updateTableC( data3 );
}
每个具体业务操作对应一个权限;不同业务操作对应不同权限,除非这些操作对应的权限判断条件是相同的。
一个权限定义含有内容:各种情况下,不同用户是否具有操作权限。权限定义输入条件是:当前用户、当前数据和当前操作,具体权限判断逻辑在权限定义里面。
目前我们看到的大部分系统,权限逻辑都是硬编码的,而且是和业务代码在一起的。
如上代码判断,非常显然的看到:将权限逻辑提取出去后,业务流程代码非常简洁明了。而且DAO的方法也超级简单,就是insert/update/delete语句。
DAO的select语句将会很复杂,因为select是要进行权限判断的。这部分权限判断包括两层:
- 调用dao的select方法之前,需要进行权限判断,这个判断只是而且只能是角色判断;
- dao的select方法里面,需要进行权限判断,针对不同的用户,查询不同的数据。(当然,有的系统实现是这样的,将用户判断放在业务流程层,业务流程层控制使用dao的不同select方法。这样dao对应不同权限情况就有不同的select方法)
幸好,Metadmin帮助开发者实现了带有权限的select操作。只要告诉Metadmin当前用户是谁,要查询什么数据,Metadmin就能返回 该用户具有权限查看的数据。Metadmin还支持分页,自定义条件(比如查姓王的用户[在自己权限范围内查询,不会超出权限范围外])。
2,解答
有了以上了解后,当业务流程发生变化时:
- 如果只是权限逻辑发生变化,修改对应的权限逻辑。如果使用Metadmin中间件,打开Metadmin权限设计器,通过web界面修改权限规则,可以立即生效,无需编码,无需重启应用;
- 如果是业务流程本身发生变化,比如举例流程是insertTableA-->insertTableB--->updateTableC,改 为insertTableA-->updateTableC--->deleteTableD。如果这样,只能是修改业务代码了。
- 如果权限逻辑和业务流程都发生变化,那么两者都分别进行修改,互不影响。
不过,有一点我非常相信:将权限提取出去后,业务流程非常简单、明了。这是我们现在就有能力将业务流程设计的非常灵巧,以至于编写好各个dao方法,业务流程可以采用类似画图的方式,灵巧的构建业务流程。
二,第二个问题
2.如何完成不同系统中的权限统一管理。
简答:Metadmin可以将单个系统的权限集中起来控制,各种系统都可以使用Metadmin进行权限管理。但Metadmin目前还没有提供将不同系统全部集中到一个独立安全服务器管理的功能,类似OES(Oracle Enttilement Server那样)。
1,解答
Metadmin系统以中间件模式集成到软件系统,可以将单个系统的权限集中起来控制,而且提供了Web管理界面。权限逻辑不需要编码,可以直接通过web界面进行管理。因为 Metadmin权限模型,并不需要对业务系统有额外规定,任何业务模型都能进行控制,所以Metadmin是满足各个系统的。但Metadmin目前不 提供将不同系统全部集中到一个独立安全服务器管理的功能。
欢迎网友们积极提问哦