程序员的自我救赎---7.1:权限系统讲解
《权限系统讲解》
在Winner2.0我们的权限系统是很老了,上次Jason看代码发现权限系统还是2006开发的。这也让我们萌生了对“权限系统”重构的念头。
无奈呼工作一直很忙,没有时间去重构它。并且重构更多时候是在操作界面上的重构,以及使用MVC翻抄一遍,最重要的是现在的权限系统还比较坚挺,没出过什么问题。
我们重点来说说权限系统的表设计,因为界面实在比较老,而且比较难看,如果我们重构之后我们再把他上到GitHub。
权限系统的表结构是非常简单的,基本和所有市面上教科书的权限系统是一样的,主要有五张表组成:
Trit_Role:角色表
Trit_RoleMember:角色成员表;
Trit_Function:功能表;
Trit_FunctionMember:功能成员表;
Trit_Right: 权限关联表;
额外还有两张系统表: Tnet_RegInfo(用户表),Tsystem_App(项目表)
这么说好像比较难理解,我们看一张图就清楚了:
trit_role:角色表,该项目中有什么角色比如:商城_商品上架员、商城_订单管理员。 不同的角色能进入的界面是不同的。并且外键关联项目表指定是哪个项目的权限;
trit_rolemember:角色成员表,为角色表的扩展表关联trit_role、关联用户表(nodeid),制定哪个用户拥有那个角色的身份;
trit_function:功能表,指定该项目中有什么功能比如:商城_管理订单,商城_查看销售报表。关键关联项目表,多项目情况下每个项目的功能不同;
trit_functionmember:功能成员表,为功能表的扩展表,制定某个功能具体能访问的页面路径;
trit_right: 权限关联表,关联角色与功能;
我们看到的权限系统可能有的比较复杂,我记得之前我们一直讲好的权限系统应该控制到按钮,如果是在Asp.net WebForm 中是不太好处理的,但是在MVC中我们使用特性类去验证一下
还是比较好处理的,但是相应的程序要去查询一次“权限系统”自然体验感要慢一点。
这里关于是否要控制到按钮Winner这套权限系统的表结构是足够应对的,就看是否要支持到这一步了。我们现在开发项目中都没有去控制到按钮这个程度,总归是接触的项目不到这个层次。
最后我还贴一下,权限系统的界面图吧,给大家看看2006年开发的权限系统界面长啥样
什么成员关联,角色关联,功能管理 就不贴了。着实难看,我自己都接受不了。不过这个互查的界面和功能还是要说一下,因为这个非常好用。
它可以更加提供的一个角色名称查询出这个 角色有什么功能,然反向查出那些用户有这些角色的身份。同理也可以正向查询哪个用户有哪些角色的身份。
好了,差不多了。在下一篇《权限系统实际应用》中我再细讲一下,如何讲权限系统应用到每个项目中去。
这里就不贴源码了,等项目重构了,我再上一份到GitHub。
有兴趣一起探讨Winner框架的可以加我们QQ群:261083244。或者扫描左侧二维码加群。