安全系统的设计
新的需求
昨天发现开发的安全中心已不能够满足外部系统对其的安全访问需求,基本情况是这样的,当前公司需要开发一个反馈中心中,有一个快速反馈的功能,其中有一个需求是能够将快速反馈的通知已邮件的形式发送到相关处理人那里通知他们说,新的反馈信息来了,你们快点来处理啊。
以前设计的安全模型是以下方式:
使用部分为一个用户有一个或多个安全角色,一个安全角色包括一组活动授权,每一个活动授权包括一组授权限制。
而定义部分是一个业务活动包括一组活动限制。
这种方式在处理安全授权的问题的过程是,首先获取活动授权是否支持活动,在查询活动的限制,并且将结果返回给调用者,而这其中需要处理两个问题。
用户授权的检查:当一个用户包括多个安全角色时需要将这些安全角色中的授权信息进行合并,这里使用拒绝优先的原则,所以只要有授权并且不是拒绝授权,就表示包括授权,而如果没有授权或其中一个授权为拒绝就表示授权失败。这里在处理合并处理起来比较简单。
授权限制:当一个用户包括多个安全角色时,还需要将授权约束进行合并,并且这里还需要考虑合并的策略。如:审核金额的限制,数值大的合并数值小的金额,而如果这是属于一定的领域实例,那么这里的合并就是将主键按一定规则进行相加。这里在处理时我将这一合并定义为一个合并的策略接口,通过实现不同的接口来完成这个操作,基本上解决了这个问题。
当前模型的问题
但当出现了前面的需求时,我发现我就要完蛋了,根本就没有什么方式能够获取到处理相关反馈的人。这里在处理反馈信息时,会根据反馈类别和反馈的国家进行限制,如:质量问题,中国,日本的就由技术部的张三处理;业务问题,中国,日本的就由业务部的李四处理。通过上而的模型对于这一需求我想真的是完蛋了。
并且经过后期的实践我发现多个业务活动都需要相同的活动限制。如:业务部的李四处理与中国,日本相关的业务问题。这里有两个业务活动,提交定单和查询客户这两个业务之中,李四都只能够处理与中国,日本相关的内容。如果采用以上模型那么就必须在两个地方进行相应的处理,而如果这里相关的业务有10个那么当李四重新分配管理法国和德国的时候就必须设置10次。
而且当前公司在处理销售时基本上是这种一个人处理一些国家的方式,这样如果将这些信息全部设置在角色之中那么定然会让角色信息出现爆炸式增长。
模型的改进
为了实现前面提出的安全需求同时解决当前模型中的问题,这里我单独的将活动授权提取出来为“数据规则”,同时将业务活动对活动限制设置为“关联关系”。将根据授权中对授权限制的设置移动到用户之下,既用户数据限制,通过这种方式的修改后的安全模型如下:
通过这种方式当用户需要一个活动授权时,先查询该用户的活动授权情况,如果允许再通过业务活动与数据约束的相关性,获取到相关的数据约束的值。同时这个模型也减少了对于数据约束的合并的问题。
还需要解决的问题
同时如果需要获取相关的用户,这里还需要考虑到数据的过滤问题,只返回与其相知道的用户,这个问题我这里还没有想好。
以上模型基本实现功能权限和数据权限的约束,具体应用还需要我将整个安全中心按新的模型修改完成后。
这里的模型是在实际应用之中减去不必要的内容后形成的安全核心内容。
希望如果大家有什么好的意见请多赐教,欢迎大家的批评指正。
********:该做什么就做什么,不该做什么就不做什么?还是不该做什么可以不做什么?