首页 新闻 搜索 专区 学院

困扰我很久的角色和权限设计,高分求教解决方案

0
悬赏园豆:100 [已解决问题] 解决于 2009-12-16 15:57

有经理,主管,职员三个角色,文件有初审,复审,终审,退回四个状态.

三个角色都能看到所有的文件,但是操作权限却不一样,职员只能操作初审的文件

主管能操作初审,复审的文件

 经理能操作所有的文件

但是“查询”是共有的,职员和主管能查询到不在他所复责范围的文件,但是那个处理会不显示的,他只能看。需求就是这样的,我现在的做法是点击左边链接会传入状态参数"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,稍微有改动,就得打开重新改,自己都看不下去了。。。。,还请高手赐教对于这种角色和权限在一起的需求,应该如何设计呢

年月的主页 年月 | 初学一级 | 园豆:90
提问于:2009-12-08 17:19
< >
分享
最佳答案
0

并非一楼说的“策略模式”,这个是“职责链模式”的一个典型应用,在大话设计模式中有直接的案例讲解,只是“策略模式”也能实现

网上也有很多人讲解,下面这个链接是张逸的讲解,你可以看看

http://www.cnblogs.com/wayfarer/archive/2008/02/17/1071377.html

收获园豆:100
persialee | 老鸟四级 |园豆:3217 | 2009-12-08 21:45
我的问题好像不好实现,不过还是谢谢你推荐的联结
年月 | 园豆:90 (初学一级) | 2009-12-16 15:57
其他回答(4)
0

这个问问吉日嘎啦同学!

风雨者2 | 园豆:216 (菜鸟二级) | 2009-12-08 17:54
这问题让我想起了“策略模式”
支持(0) 反对(0) SeaSunK | 园豆:187 (初学一级) | 2009-12-08 18:24
0

membership

DaCHun | 园豆:255 (菜鸟二级) | 2009-12-08 18:00
这是单个模块的功能,不适合membership
支持(0) 反对(0) 年月 | 园豆:90 (初学一级) | 2009-12-09 10:05
0

不要用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 }

 

或者用业务流做

 

阿松 | 园豆:601 (小虾三级) | 2009-12-08 18:07
0

按记录权限来。建 一个权限表来动态设定这种关系。变动就不怕了。

阿龍 | 园豆:268 (菜鸟二级) | 2009-12-10 17:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册