基于MVC模式下,设计的一个通用,简单,实用的用户权限构架

  有那么二三年没写WEB程序了,之前研究的是WEBFrom,最近这两年MVC的兴起以及其新特性,吸引了大批的粉丝。很不幸,我也被吸引了,其迅捷开发很大程度的吸引了我。当然,中小型项目利用这样的迅捷开发是有必要的,大项目……还是再议吧,毕竟12306这样的项目,咱们不懂,百万级的项目都没见过几个,过亿的项目,这钱该怎么花,我不得而知……

 

  废话不多说,本文假设你已经了解了MVC的最基本知识,不需要有多全,差不多能建立个项目,能做个数据库的简单增、删、改、查就行 --- 又一句废话!

 

  先上我设计的系统构架图(本文是理论图,木有代码,代码部分,将来在写,当然什么时候写,那就不好说了……)

  

  图上完了,比较抽象,下面我具体解释一下。

  1、系统管理员:

    这部分可以直接具体实例化一个管理员表,内容简单,实现登录即可,会编程的都能做到,保证童叟无欺!丫是这系统的皇上,特性是对所有系统权限免疫,它想干啥都行(当然,系统得有相应的功能)!相当霸气……

    为啥要设计它?为啥不把它弄成一个拥有特殊权限的用户呢?

    第一、它有用户权限免疫特性,系统无论是否开发完毕,它都可以随时进入各个地方,看看完成状况是否符合开发需求。

    第二、它其实完全可以是一个拥有特殊权限的用户,但是,你得给他分权限吧,你的给他分配操作菜单什么的吧,你加点什么功能,都要给他分配一遍,否则它就罢工——我TMD是皇上,还需要你给我分配?普天之下莫非王土,我抗议!所以,经过本座的仔细、慎重考虑,加上它。如果后期不需要了,直接屏蔽掉。天下由诸侯割据,各自为政。

    

  2、系统操作:

    这部分也简单。

    某天老大找我:“让你做的用户系统做的怎么养了?”

    “差不多了”

    “差多少?做了多少?都做啥了?我能看看不?”

    “有些有界面,有些没界面,总之写了不少,一大堆呢……”

    “尼玛,玩我是不是?”

    “……”

    充分考虑以上的对话,我在失眠的时候想出了个解决方案,那就是在开发的时候,先写一个全局的过滤器。

    什么是过滤器?http://www.cnblogs.com/lzhp/archive/2013/05/14/3076478.html

    过滤器相当于一个查户口的,它要实现一个这样的功能。系统任何的请求都要通过过滤器,每个请求最后都是一个ACTION方法,那么好啊,把ACTION的家谱拿出来,我查查你合法不!所以,这过滤器就获得到了每个ACTION的名字,Controllers的名字(爸爸),甚至AREA的名字(爷爷),甚至是整个的URL(真正的家谱)。户口查完了,那就要登记在册,过滤器看看数据库里有没有整个ACTION,如果有了,那就合法,如果没有,那就是黑户,你得上户口,否则将来你没身份证,出门买不到火车票……(有身份证也未必能买到——ACTION苦着脸说!)

    就这样,在开发测试期间,所有的ACTION都在调试过程中被登记在册,备用!——其实这就是系统的所有操作权限了。一个表,记录AREA,Controllers,ACTION,URL这些数据足够。当然聪明的你一定还想到了一个扩展。那就是它的状态!!!

    不是每个ACTION都是随便由用户操作的,有些ACTION是系统级的,用户是根本看不到的,也有些ACTION是无私奉献的,谁都可以随便看的,有些ACTION是需要TMD交会费,或者办了特权的贵宾才能看的,有些ACTION是TMD没审批的,还不知道是否能够通过老大的审阅的…… 所以,给这个ACTION加个小小的状态,将来就不乱套了!

 

  3、系统菜单

    对于系统菜单这块也简单,什么样的用户能看到什么样的东西。皇帝(系统管理员)信步游街,随便看,随便摸,随便上……,其他的……再议!

    菜单和权限不一样,菜单决定你能不能看到,而能不能点进去,那是去权限的事。这个地方,我们在用户权限的时候具体再说。

    除了皇上以外,其他用户,都是收约束的,即使是王侯将相(小范围内的管理员)也不能随便。所以,先有皇帝来设置这些,本国有工部、邢部、兵部、礼部、户部、礼部……这些部门,每个部门又有什么具体的工作……!(什么,你说还有后宫?你想做太监?)。它就是个表面上的组织结构图而已。

    不难看出,系统菜单是一个递归表(无级分类),由开发人员录入(为什么是开发人员录入?笑话,程序猿没开发完,你就录进去,那不就是死链接吗?老板不抽你也的抄你,除非你总捡到老板的肥皂),当然,这些菜单无需加具体的什么的,就是把菜单录库、以及菜单的相应链接录入进去就完事。它隶属于系统(皇帝),民间管不了这事。

    比较简单,一个表就搞定,ID,ParentID,name,URL(这个地方可以拆开,上面的操作权限里提到了,URL是由 ACTION 的家谱构成,它爹,它爷爷,以及太爷啥的),将来有扩展的空间。此外,由于有些界面的需要,我们可以加点其他字段,比如它的图标……

     注意:此处并不涉及特别的权限设置,系统菜单仅仅分为2个级别。第一,管理员私有,第二,系统用户可用。管理员私有的是它自己的,系统用户的菜单管理员也能看到。-----我的就是我的,你的还是我的!

 

 

  4、工作组

    一个国家不能只有一个空壳皇帝啊,人家也不是皮包公司,所以,皇上家很热闹,因为它有钱有势力,所以,每个人都想抱皇上大腿!每个皇帝都希望国泰民安,经常暴动和起义的不行!

    但人那么多,怎么安排呢?所以,有了一个科考制度。大家都来这里等皇帝的安排。

    系统管理员先做一个“待审批的工作组”,所有申请工作组的人的“原始身份”都是“待审批工作组”里的普通一员。然后,他们开始申请属于自己的工作组,提交好申请后等皇帝审批,审批通过后,立即走马上任,摇身一变,从“待审批”成为“工作组的管理员”,工作组的管理员就可以招纳小弟,而每个小弟都要有属于自己的办公室什么的,由工作组的管理员自己审批,皇帝是无需管理这些事的,否则它得累死(君不见后宫三千佳丽……)!此表也是一个递归表“虽我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙;子子孙孙无穷匮也”……

    这里可能还不够形象,可以在举一个例子。为什么非要形象呢?因为下面有个用户组,容易混淆。

    比如:我是工商局,客户是天朝子民。

    客户想干点啥事业,你得先注册公司,否则是违法的,城管你怕不怕?。注册公司之前你是“国家普通公民(系统提供的默认组)”,注册之后,你就是某个公司的“法人代表”。你的公司还可以有财务,技术,公关……等部门。你的公司可能还有子公司等等。说了这么多,工作组,就是一个提供具有相同工作性质的组织。这里重点说的是组织,至于组织里面的人,不是这里要做的。

   

  5、用户组

    也很简单,重点是要跟工作组区分一下就好。

    用户组是用户角色,工作组是一个组织。角色隶属于组织,比如,国家主席和工会主席是不同的主席!!!!

    一个工作组就相当于一个公司,而一个用户组,相当于公司里分为多少个角色,每个角色会有不同的工作要做。比如有老板(用户级管理员,丫的来历霸道,有皇帝钦点的)、财会、程序猿……

    说白了,这就是用户角色表!它隶属于某一个工作组。

 

 

  6、系统用户

 

    很简单,除了皇帝(系统管理员),都是系统用户。上面的工作组里已经说的差不多了,用户都会隶属于某一个工作组。分工不同而已……

    系统用户的来源:

    第一:系统管理员审批通过的,是工作组的管理员,他能在本组织内,设置一些用户组。然后等待另一种注册会员的到来。对整个工作组里的大小事务都有绝对领导权。他的任免只听皇帝的。

    第二:由用户审批的用户,他们是通过注册到指定的工作组内的用户。有组内的管理员审批通过。管理员预先给他们设置好所属的用户组权限。

    综上所述,工作组管理员一旦申请通过,系统里会多出一个工作组,隶属这个工作组的用户组,这个用户组下有一个角色叫“管理员”,对这个组有全局操作权限。而用户组内的其他角色,由工作组管理员操作,然后等小弟们来报名即可。

 

 

  7、用户操作

    上面介绍系统操作的时候说过。系统的操作,有些是皇上私有的权限(夜夜翻牌子选老婆的事,你能干?),有些是需要交了会费,或者抱了大腿的人才能做的。还有一些是社会福利的,老百姓都喜闻乐见……

    这部分针对那些注册了的用户(皇帝的权限无限大,而老百姓——那些非注册会员,只能听天由命)。这些用户的权限由各部老大设定。范围就是皇帝特权特权之外的那些权利。当然,管理员如果怕老婆或者怕小蜜,也可以赏给他们管理员权限,总之,由部门老大在设置部门职位的时候设置,之后也可以随时修改。

    工作组管理员为每一个用户组分配操作权限,这部分的权限是从系统操作部分里挑选出来的,从此每个角色都有每个角色能做的事情了!如果功能都一样,那说明工作组管理员是个白痴+笨蛋!

 

  8、用户菜单

    这地方是个灵活的选择。是否人性化,全看自己设计,本文只提供了一个理论而已(具体的代码还没有coding)!

    怎么个灵活法呢?

    有些系统,虽然用户能看到那里有个东东可以点,但是点完了,系统告诉你你权限不足(此时如果你不上点银子或者不拿出自己的工作证肯定进不去)。有些系统,你能做什么,系统就让你看到什么,你做不了的,系统干脆不给你看!

    难道没有折中的设计么?为什么要在这个地方需要设置呢?答案是:场景不同!

    比如说商务型的,他的目的是让你能看到,,想要的话,你得花钱!所以它必须让你看到,买卖不在人情在,广告也是可以赚钱滴!

    而另一种是应用级别的,部门和部门之间不透明,你不应该也不能了解其他部门的工作的流程以及习惯。所以,这个地方,灵活点还是有好处的。

 

 

(全文完毕!)欢迎提建议,好的作品是改出来的!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。