大概是这个意思的。比如一款企业内部的管理软件,菜单很多。管理员在设置每个用户的时候,都要分别对每个用户的权限做设置。也就是让用户看到自己权限内的菜单。我知道在登录的时候,让用户没有权限看到的菜单visiable=flase就行了,这个我会。我的问题是,如何设计这个管理员添加用户、管理用户的软件界面。权限设置这块,要用什么控件或者什么方法弄比较好?因为要考虑到以后软件的升级,所以,要方便以后的维护。因为如果以后添加了新功能菜单,就要对权限数据库进行更改。一开始考虑的是使用checklistbox,比如图片所示,可是如果以后要是在基础资料权限设置中新增几个功能的话,那么,所有权限的item的id就要更改了。跟数据库的对应就会乱套了。我想的是,不管在哪里更改了权限功能,只需要在数据库中的最后,添加字段就行了。

解决方案 »

  1.   

    可以设置一张数据表 里面有个级别的选项,然后改变级别就可以获得更多的权限,
    用一个dbedit来读取级别
    if  dbedit.text >= 1 then 
     ....
    else
    ...
      

  2.   


    你的意思是将权限分组吗?跟windows的用户组一样?只要设置用户所属的组就行 ?可这样的问题还是存在,如果在这个组的权限中增加新的权限,顺序还是会有点乱呀。
      

  3.   

    你的目标总结来说就是三条:
    第一,菜单依用户权限动态显示。
    第二,方便地增加新功能。
    第三,方便地管理用户权限。为了实现此目标,最基本的要从数据库表设计做起,好的表设计是成功的一半。应该至少有用户表、功能表、用户功能映射表。前两表记录的ID是不变的,这样在增加新功能时,不会发生你所说的“乱套”。为了更好地实现第三个目标,还应该引入角色表。权限的分配,应该是针对角色来进行,管理用户就是简单地指定他们属于哪个(或哪些)角色就行了。要实现菜单的动态显示,当然就还要引入菜单表、菜单功能映射表。菜单动态显示的流程如下:
    1、用户登录,获得UserID。
    2、根据UserID,取得RoleID。
    3、根据RoleID,取得该角色所分配的所有ActionID。
    4、动态创建菜单。遍历所有菜单项,判断菜单项所关联的ActionID是否包含在当前用户所拥有的ActionIDs中,若有,则创建当前菜单项;若无,则不用创建。
    5、显示主程序界面。因菜单可能是多级的,系统功能也可能是多级的(比如权限分配细化到按钮级),所以用TreeView控件来做用户权限、系统功能管理,比较容易实现。
      

  4.   

    谢谢你的说明,最近一直在被这个问题困扰,没有思路。请问你说的用户功能映射表有什么用?还有,用TreeView来做权限的设置,是否也能做成前面有小方框的选择的形式?可否稍微给点代码参考一下
      

  5.   

    开始也考虑过用checkbox,可是如果权限很多,比如几十个甚至更多的时候,那就要用几十个checkbox,这样,虽然便于以后的维护,以后要新建个功能模块,就要增加一个checkbox,然后数据库增加一个字段就行了,但是界面就不好设计了。
      

  6.   

    单独建立一张权限表,我们现在用的权限表是这个结构字段     类型
    aid     char(4)
    atype   varchar(255)
    aname   varchar(255)
    adesc   varchar(512)aid是权限的编号,atype是权限的类型,aname是权限的名称,adesc是权限的描述,每一类权限的编号跨距是100,例如编号0000-0099的权限是系统权限,0100-0199是A类资料的录入、修改、删除、维护等权限,0200-0299是A类资料的查询权限....等等,所以这样一张表可以存储100类1级权限,每类1级权限可以存储100个子权限,这些子权限可以再自定2级和3级权限,例如0000-0050是一类2级权限,其中0000-0030和0031-0050是两类3级权限,总共可存储10000个权限,一般也就够用了。
    还有个表存储每一个2级以上子权限类的描述,我们现在不用,因为项目用到1级权限和其子权限就够了,1级权限才用了9个,每一类1级权限的子权限也都没超过30个,可扩展空间还很大。UI部分用什么就无所谓了,就是读这个表生成一个权限表,让用户能选就行了。你要是不够用还是把aid的范围扩大,每一类的跨距也扩大,就可以容纳更多的类了。
    在用户表中存储该用户的所拥有权限的一个编号组合就行了,例如xxx用户的权限是0001,0002,0007,0102,如果使用了用户群组的概念也一样是为每个群组指定一个权限编号组合就行。这样用户控制模块编码稍微复杂一点,但扩展性很强。
      

  7.   

    http://blog.csdn.net/bdmh/archive/2010/09/02/5858122.aspx