《用EOM的眼光评判‘我要做全国最最好的标准权限组件和通用权限管理软件’4》(2010/04/12)

接上篇。

四、软件构架设计

    有了相同的功能设计、有了相同的数据库设计,不同的程序员依然能开发出不同的软件。而这些不同绝大多数是在程序上的不同,例如,命名不同、使用语句不同、算法不同、三层构架不同,可以说是半斤半两,难怪程序员之间相互看不起,都认为别人跟自己一样呢。其实当程序员水平上升到一定程度就会考虑到软件构架问题了。这个构架要比程序本身的技术实现要重要重要的多。

1、一般的权限管理

一般的权限管理并不关心程序的构架,无论是单一系统的权限管理、还是多系统权限管理,他们根据功能设计和数据库设计,将程序编出来就行了。最多考虑一下采用B/S还是C/S,最多考虑一下采用是C#还是JAVA?。稍好的程序员最多在程序内部考虑一下采用三层架构(界面层、逻辑层、数据层)还是不采用。

他们不关心构架主要原因:

1)  不清楚什么是构架。

2)  软件定位于单个系统,或多个系统,不考虑构架也能实现软件功能。

3)  自身编程水平还没有到达这个层面。

2EOM权限管理

EOM则根据其定位,站在企业信息化整体的高度,所有应用系统都必须考虑软件的构架,否则无法实现其定位目标。就权限管理而言,由于权限管理定位于多企业多系统,则必然考虑到多企业多系统的现状。

1)  权限管理有两个版本:B/SC/S

2)  开发语言:C#,java或其他语言。

3)  B/SC/S公用相同的公共核心库和权限管理库,这些公共核心库和权限管理库都是标准权限管理模块,可供上层进行调用。

4)  EOM提供两种权限管理方式,一个是系统方式,即完整的权限管理系统,另一个是标准模块方式,即可以向用户提供标准的权限管理功能,用户可以根据这些功能结合自己的界面形成自己的权限管理系统。

5)  权限管理即可以在企业内网运行,也可以在互联网运行。

6)  程序实现界面和处理的分离,所有处理都放在公共核心库和权限管理库之中,可以通过两种形式DLLWebService来调用。

7)  程序采用参数多形式方式实现参数化:数据库、文本、XML等。

8)  通过参数化和接口方式实现特殊权限管理的需求。

附图:

1、现行企业权限管理示意图:

  《用EOM的眼光评判‘我要做全国最最好的标准权限组件和通用权限管理软件’4》(2010/04/12)

 

2EOM权限管理系统架构图

《用EOM的眼光评判‘我要做全国最最好的标准权限组件和通用权限管理软件’4》(2010/04/12)

 

3EOM的权限管理系统和标准权限管理模块

 《用EOM的眼光评判‘我要做全国最最好的标准权限组件和通用权限管理软件’4》(2010/04/12)

4企业内部多系统状况下的EOM权限管理示意图

《用EOM的眼光评判‘我要做全国最最好的标准权限组件和通用权限管理软件’4》(2010/04/12)

5、多企业EOM权限管理示意图。

《用EOM的眼光评判‘我要做全国最最好的标准权限组件和通用权限管理软件’4》(2010/04/12)

 

6EOM特殊的权限管理处理示意图。   

《用EOM的眼光评判‘我要做全国最最好的标准权限组件和通用权限管理软件’4》(2010/04/12) 

7、权限比对函数(部分)

此程序仅供参考,仅反映了软件的构架。

 

用户可以在界面一开始的时候,进行功能权限的比对

例如,在901系统中的003001001功能进行权限比对

If(Check_authority(“ 901” ,” 003001001” ,””)==0) // 0 表示无权限,1表示有权限;

Return 0;

用户可以在界面中的某一操作时候进行比对。

例如,在901系统中的003001001功能中进行001001001操作的比对。

If(Check_authority(“ 901” ,” 003001001” ,” 001001001” )==0) // 0 表示无权限,1表示有权限;

Return 0

 

 

 

private void check_authority(String appsys,String fucntion_code,String op_code)

        {

            int s=0;

            string usr_name=get_usr_name();

            string authority_mode = eomlib.get_sysparameter("authority_mode");//取系统参数

            string aurthority_dll = eomlib.get_sysparameter("authority_dll");//取系统参数,参数中含DLL名和函数名,中间用逗号分开。

            string authority_url = eomlib.get_sysparameter("get_authority_url");//取系统参数,参数中含URL名和函数名,中间用逗号分开。

            switch(authority_mode)

            {

                case "eom":

                    s=eomlib.check_authority(usr_name,appsys_code,function_code,op_code);

                    break;

                case "url":

                    s=iasglib.call_webservice(authority_url,usr_name,appsys_code,function_code,op_code);//调用外部webservice

                    break;               

                case "dll":

                    s=iasglib.call_dll(authority_dll,usr_name,appsys_code,function_code,op_code);//调用外部DLL

                    break;

                default:

                    break;

            }

            return s;

 

        }

        private string get_usr_name()

        {

             return publicdata.usr_name;//用户名在用户登陆时被保存在公共变量publicdata之中

        }

        //--------------------此处为权限管理的WebService 的函数-----

        [WebMethod(EnableSession = true)]

        private int check_authority(string usr_name,string appsys_code,string function_code,string op_code)

        {

            return eomlib.eom_check_authority(usr_name,appsys_code,fucntion_code,op_code);

        }

      

 

        //--eomlib---此处为EOM公共库函数,其包含了权限管理的功能----------------------------

        private int eom_check_authority(string usr_name,string appsys_code,string function_code,string op_code)

        {

            int s;

             if(op_code.Trim().Length==0)//当操作代码为空的时候,表示只检查功能代码,反之检查操作代码。

                 s=check_function_authority(usr_name,appsys_code,function_code);

             else

                 s=check_opertion_authority(usr_name,appsys_code,op_code);

            return s;

        }

        private int check_function_authority(string usr_name,string appsys_code,string function_code)

        {

            int s=0;

            string role_mode=eom.get_sysparameter("role_mode");

            if(role_mode=="Y")

                s=check_authority_with_role(usr_name,appsys_code,fucntion_code);

            else

                s=check_authority_with_function(usr_name,appsys_code,function_code);

            return s;

        }

        private int check_authority_with_role(string usr_name,string appsys_code,string fucntion_code)

        {

            int s=0;

            string role_name=get_role_name_with_usr_name(usr_name);//从用户角色表中查询出角色

 

            string[] fucntion_code_tab=get_all_function_with_role_name(role_name);//按照角色将所有的功能代码都取出来。

            foreach(string function_code in fucntion_code_tab)

            {

                s=check_function_with_usr_name(usr_name,appsys_code,fucntion_code_tab);//对用户功能表按照系统、功能、用户三个字段查询,查到且权限标志为1则返回1,否则返回0

                if(s==1)

                    return s;

            }

            return s;

        }

 

 

总结陈词

通过对权限管理一个典型的程序剖析,大家可以看到,用EOM来构建一个程序的基本流程。这流程是:首先关注权限管理在企业经营管理的中地位和作用,第二,给权限管理一个多企业多系统的定位,第三,给出权限管理的功能设计,第四,给出权限管理的数据库设计,这个数据库设计是站在EOM高度对权限管理的各元素的抽象,并共享其他相关的标准信息,第五,为了实现权限管理的定位,对软件进行了构架的设计,这个构架可以实现多企业多系统的权限管理的要求,也满足单企业多系统,即满足互联网也可以满足局域网,即可以满足B/S也可以满足C/S的各种选择。第六,就是按照以上五个部分用程序实现就行了。(程序实现并没有太多的难度的)。

 

     EOM是一个全新的企业信息化的思路,它拓宽了程序员的视野,它所强调的企业经营理念,程序的定位,程序的抽象数据库设计,程序的软件构架,都将给程序员带了更多更深入的思考。

下篇:《程序员的春天:EOM与程序员》

你可能感兴趣的:(权限管理)