Loading

企业级系统的认证与授权设计

  在IT信息化中,数据安全是必须考虑的问题,小到门户网站,大到企业级平台应用,甚至企业云,公有云,数据安全都是一个核心问题。我从事ERP软件开发多年,在ERP的认证,授权方面相对有一个比较系统的了解,本着讨论交流的精神与大家一起共勉。

  首先我们要搞清楚一个问题,什么是认证,什么是授权。

  认证——你是谁(Who)?

  认证:认证(authentication):即对不同的用户进行识别,检查用户是否有权限对那些受限制的界面进行访问,这种称为认证。比如登录。

  授权——谁(Who),在那个系统(Where),可以做什么(What)?

  授权(authorization):决定用户可以对哪些功能按钮进行操作,对那些数据(数据行,数据列)进行有效的访问即称作为授权。

  其中功能操作的授权称作为功能权限。比如下图:员工A要有 公司知识库平台->培训->培训预算->申请培训->培训列表页面的【查询】和【申请】按钮,同时员工A要有 公司综合管理平台 ->信息中心->通知公告->通知公告列表页面的【发布】和【查询】按钮的操作权限。如图所示,在现实场景中,跨平台,跨系统的场景比比皆是。 

  其中数据权限以下图为例:我们看到下图用红色框圈起来了一个数据列表。假设这个数据列表为某企业集团的销售汇总表。

  现在客户提出了如下几个需求:

  1) 销售总经理可以查看所有的汇总数据。

  2) 大区经理只能查看自己所属大区的数据。

  3) 职位等级在二级以下(包括二级)的只能查看自己所属区域交易累计金额小于1000的数据。

  4) 只有销售总经理,大区经理能查看联系方式。

  如此需求,在企业级ERP开发中屡见不鲜,为了解决客户的需求,我们不得不反复的去修改和发布代码,其实我们可以通过简单的配置来满足客户的需求。这个简单的配置我们就可以称之为认证授权系统,说到这儿,就简单的把这个系统的概念引申出来了。

 

  那我们要设计这个系统,我们要考虑到一些什么因素呢?要做出一个适应客户需求变化的系统,必须要具备一个良好的设计。

  首先,认证与授权系统的架构应该是一个SOA的架构。这儿所用的SOA绝对不是赶技术的时髦。因为一个企业集团可能有几个,甚而几十个,上百个的子系统。我们不可能为每个子系统都维护个套用户表,角色表,以及一套权限系统。所以要把这个认证与授权的功能给抽出来,做成一个松耦合的子系统。但同时这个子系统要与其它系统进行数据交互,所以我们要采用一定的技术手段来与业务系统通信,不管是用Web Service还是WCF,其实目的都只有一个,就是让认证与授权系统与其它业务系统进行通信。这样即实现了一处维护多处运用的场景,这样就实现了系统级的重用,当然,采用了SOA的开发,就不得不提SOA的安全,我在这个系统里是使用的c#拦截器机制,具体的实现以后有机会单独提出来与大家分享,有感兴趣的朋友我们可以建一个群共同交流。

  

  其次,系统的可扩展性要强,特别要有一个强有力的代码支撑。比如认证授权这个系统,用B/S模式的更好,还是用C/S模式的更好?这个是各圆其说,我做了六年的B/S项目,但是我最后还是选择用C/S的结构来开发,其中的原因以后有时间一一道来。我们来欣赏下现的一个代码片段:

  

   我把客户端的验证放在了Model上,如果在B/S架构下,我不用重复的去写一次JavaScript的验证。常用MVC的朋友都知道在B/S结构下,怎样用Model的属性进行客户端的验证了。在C/S结构下,可以通过WPF轻而易举的实现客户端的验证,这样写的目的,就达到了代码级别的重用。

  还有一个比较重要的因素,就是用户体验。当我们的程序设计的如何的好,代码重构的怎样的精练,如果没有一个好的人机交互,想必会抹杀很大一批用户的好感。对我们程序员来说,要设计一个好的人机交互界面,确实有待提升。我以现在这个系统的UI来说吧,在短短半年的时间里,UI重构了三次,第一次是用WPF下的Ribbon插件来设计的。第二次是用微软官方示例提供的设计,其中还包括了动态翻页的效果,非常炫。第三次,采用微软的Metro风格设计。很明显每次的设计都有质的提升。

 

  第一个版本的界面:Ribbon。

  

第二个版本的界面:WPF技术下实现的翻页特效界面。

 第三个版本的界面(Metro):采用Prism + MVVM开发的。

   每个界面虽然都丑,但是也各具特色。只是个人的喜好而已。

 

 

 

 

posted @ 2013-03-28 06:21  Sam Xiao  阅读(6804)  评论(38编辑  收藏  举报