zoukankan      html  css  js  c++  java
  • 权限管理的一点思路

    在一个WinForm项目中的权限管理部分,使用MDI窗体,从主窗体上的menu打开MDI子窗体,对每个子窗体都有一个权限ID,打开时要判断user是否有权限,为了把校验这部分作的通用些,使用了下面的实现:
    1.定义一个接口IRight,里面只有一个方法GetRightID,入下:

    interface IRight
    {
        
    string GetRightID();
    }

    2.每个MDI子窗体都继承这个接口,在实现GetRightID中返回一个权限ID,例如:
    public string GetRightID()
    {
         
    return "Customer";
    }

    3.在主窗体上打开子窗体的地方,加上对权限的检验,例如:
    Form2 f = new Form2();
    if ( UserHaveRight(GetUserRights("Admin",f)) )
    {
         f.MDIParent 
    = this;
         f.Show();
    }

    else
    {
         f.Dispose();
    }

    其中调用的两个函数:
    private bool UserHaveRight(ArrayList currentUserRights, IRight formWillOpen)
    {
        
    if ( currentUserRights.Contains(formWillOpen.GetRightID()) )
        
    {
             
    return true;
        }

        
    else
        
    {
             
    return false;
        }

    }

    private ArrayList GetUserRight(string userID )
    {
        ArrayList result 
    = new ArrayList();
        result.Add(
    "Customer");
        result.Add(
    "Premise");
        
    return result;
    }


    刚开始时是把GetRightID放在一个窗体基类里,MDI子窗体充这个基类继承然后override这个方法,后来作成从接口继承是考虑到这个接口还可以用在控件上,也就不仅仅是页面级的权限控制。

    目前还有一个问题是,在检验时要先生成子窗体的实例,如果检验不通过还要释放掉,就有资源浪费,好在检查权限不通过的情况不多,目前这个办法还是可以接受的。如果有更好的办法,还请大家不吝赐教。

    由于公司不能上网,这个post是我写在纸上到网吧里敲上来的代码只是说明问题,没有编译过,象GetUserRight也只是象征性的返回一个权限ID的集合,实际中有可能是DataSet或其他的。
  • 相关阅读:
    生活娱乐 工业机器人代替工人装配鼠标键盘
    生活娱乐 工商银行如何查询开户行
    生活娱乐 格力空气能热水器怎么样
    生活娱乐 岛城将开首家机器人餐厅
    生活娱乐 毕业生论文查重技巧
    Windows 老是弹出要自动拨号连接怎么办
    Office 针式打印机如何调节边距
    Office 如何打印彩色照片能取得较好的效果
    西游释厄传如何设置简化出招表
    [ES2019] Use JavaScript ES2019 flatMap to Map and Filter an Array
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/59734.html
Copyright © 2011-2022 走看看