软件的功能模块如:销售管理、采购管理。。等
大模块下面有多及小模块。如:销售管理 下面有 销售单、定价。等我的问题是,每个模块都牵涉到权限问题,必定要给每个模块编一个id
那么所有模块名及其id共同形成一个类似目录树的结构,那么我应该以什么形式
把这些id“保存”在程序里,供模块调用时检查权限呢?我之前是想把所用id都保存在各自模块对应的类里,但这样导致id很分散,很不直观,不方便管理。
望大家指点~

解决方案 »

  1.   

    to楼上:用户权限是有记录在数据库里,例如某用户有权限:01、02 (对应:销售管理、采购管理)
    但源程序里也要保存这个对应关系(01--销售管理、02 --采购管理),
    才能运行对应程序(如打开某销售管理的窗口是form1,而不是其他什么form)
    问题是,这个模块及子模块的数量达到数百个时,管理起来就很不方便了。
      

  2.   

    在主窗体里设置一个静态变量,储存了登录用户的权限WhoAmI,然后设定一个分析角色的函数,在form的构造函数里先调用,判断角色权限WhoAmI,然后再初始化窗体等等。
    这个应该不算复杂吧。比如:
    if(ActionHandle(LoginForm.WhoAmI))
      Initalize();
      

  3.   

    使用树形结构进行存储,对每个树型节点既这个的某个模块增加Id、Name...
    在初始化这个树的时候,在树的属性中增加一个Hashtable类似的变量,把Id作为关键字,Module作为值进行存入。这样可以进行便捷的访问,如果直接编写一个节点查找方法应该也是比较方便的。其实在系统中这样的树型数据结构是很正常的。
      

  4.   

    to楼上:怎么在树的属性中增加一个Hashtable呢??
      

  5.   

    提交一个参考
    1.首先要有基本权限(如,进入,查询,添加,删除,修改等)
    2.定义功能列表(如,销售管理、采购管理)
    3.在以上基础上架起角色
    4.在Web上的体现,将验证统一起来.
      

  6.   

    对于你说的树结构你可以平面视角来观察如
    public interface ITreeModel
    {
        int Id{get;set;}
        string Name{get;set;}
        int ParentId{get;set;}
        ITreeModel Parent{get;set;}
        ITreeModelCollection Childs{get;set;}
    }
    在此id都是唯一的,对于此类他的加载时完成他的父类的关联和子类的关联平面化
    在读取好权限后加载可以用的功能模块,十分方便。