随笔-18  评论-11  文章-12  trackbacks-0

     在《项目回顾(一)权限系统设计》中,我谈及本项目合同管理的权限系统的结构。这篇日志记录一个具体的应用。

      在我们这个项目中,有个“合同信息”的页面,用于合同的查询和流程控制。如果没有相关角色,则无法对这个页面进行操作,重定向至重新登陆页面。在进入这个页面之后,出“新增合同”外,其余按钮均不用。选中某一行的合同后,根据该合同的状态,以及当前操作员所具的角色,决定是否将最下面的按钮状态更改为可用。

      在实际设计程序时,将合同状态和操作员角色对按钮的影响分开考虑。1)某一种状态下,有几个按钮是可用的。比如对选择一份录入状态的合同,有综合信息、合同增加、删除、修改、依合同创建、请求审批6个按钮可用。将合同状态-按钮状态对应关系用一个二维bool数组status[6,10](第0行为页面初始化)保存起来。2)再考虑角色对按钮的影响。综合信息按钮5个角色都可以使用,而领导审批按钮,则只有审批人、管理员、超管能够使用。用“||”将能够操作某个按钮的角色联系起来。如btnCheck.enabled = checker || manager || superManager。之后将这两个影响因素用“&&”连起来。如一份“录入”状态的合同,其请求审批的按钮可用性用(checker || manager || superManager ) && status[1,5]。本文最开始的问题则基本解决。另外,不同操作员可能对应不同的部门,则一因素放在查询中考虑,即只能查询出所管理部门的合同。

      角色对按按钮状态的影响,还可以用上一篇文章中的质数法来解决。比如综合信息对应2,合同增加对应3,删除对应5…合同审核对应11,而将2*3*11作为权限值赋给合同审核人角色,并保存到数据库。在进入本页面时,对某一个角色所具有的权限值解析为单个的质数,也即所能够进行操作的按钮。我这里没有用这种方式,首先因为按钮的状态只在这个页面使用,而不用保存到数据库,再者按钮较多,在对权限值进行解析时,比较费劲,得不偿失。实际上我也正是因为前一天见过这种质数法,才在碰到问题时,想到用bool值来判断,可见其实想通。

      这个设计采用表驱动的方法,将合同状态对按钮状态的影响,保存在单独的一张表中,单独处理。程序简洁,逻辑清晰。


类别:项目回顾 查看评论
文章来源:http://hi.baidu.com/hawkingliu/blog/item/9f3810d8c7fda53033fa1c9e.html
posted on 2008-04-16 14:17 ronliu 阅读(167) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理