有经理,主管,职员三个角色,文件有初审,复审,终审,退回四个状态.
三个角色都能看到所有的文件,但是操作权限却不一样,职员只能操作初审的文件
主管能操作初审,复审的文件
经理能操作所有的文件
但是“查询”是共有的,职员和主管能查询到不在他所复责范围的文件,但是那个处理会不显示的,他只能看。需求就是这样的,我现在的做法是点击左边链接会传入状态参数"State",后台处理代码
if (Request["State"] != null)
{
if (Request.QueryString["State"].ToString() == "search")
{
switch (RoleName)
{
case "职员":
if (TFile.States =="初审")
{
"处理按钮显示"
}
break;
case "主管":
if (TFile.States =="初审" || TFile.States="复审")
{
"处理按钮显示"
}
break;
default:
"处理按钮显示"
break;
}
}
else
{
switch (RoleName)
{
case "职员":
if (TFile.States =="初审")
{
"处理按钮显示"
}
break;
case "主管":
if (TFile.States =="初审" || TFile.States="复审")
{
"处理按钮显示"
}
break;
default:
"处理按钮显示"
break;
}
}
}
都是面条般的if/else,稍微有改动,就得打开重新改,自己都看不下去了。。。。,还请高手赐教对于这种角色和权限在一起的需求,应该如何设计呢
并非一楼说的“策略模式”,这个是“职责链模式”的一个典型应用,在大话设计模式中有直接的案例讲解,只是“策略模式”也能实现
网上也有很多人讲解,下面这个链接是张逸的讲解,你可以看看
http://www.cnblogs.com/wayfarer/archive/2008/02/17/1071377.html
这个问问吉日嘎啦同学!
membership
不要用switch 直接用if判断好了
1 if (TFile.States =="初审"||RoleName=="职员")
2 {
3 "处理按钮显示"
4 }
5 if (TFile.States =="复审"||RoleName=="主管")
6 {
7 "处理按钮显示"
8 }
9 if (TFile.States =="终审"||RoleName=="经理")
10 {
11 "处理按钮显示"
12 }
还可以用登录用户来判断权限,先把该用户的权限缓存起来,然后用IsExistsPermission("用户ID","权限名")方法为判断是否拥有一权限.
1 if(IsExistsPermission("用户ID","初审")&&TFile.States =="初审")
2 {
3 "处理按钮显示"
4 }
5 if(IsExistsPermission("用户ID","复审")&&TFile.States =="复审")
6 {
7 "处理按钮显示"
8 }
9 if(IsExistsPermission("用户ID","终审")&&TFile.States =="终审")
10 {
11 "处理按钮显示"
12 }
或者用业务流做
按记录权限来。建 一个权限表来动态设定这种关系。变动就不怕了。