我的程序中使用的是TMenu结合TAction控件作的用户界面,前期没有考虑用户权限问题,现在该怎么增加权限管理(用分组或者设置'who'-->'action'列表方式)改动量最小啊?好像DELPHI的有个设计模式是专门对付这种情况的,可是我记不清在那个地方看的,又没有具体操作过。那位高手说说啊!感谢!

解决方案 »

  1.   

    可能要自己来个函数,设定权限了
    procedure SetAdmin()
    begin
    actxxx.visiable:=false;
    end;
    ......
      

  2.   

    如果你使用了Delphi的控件作为数据显示或者编辑,那恐怕就只能在DBGrid之类的东西中设置Visible或者Readonly之类的了。权限系统一直是一个很繁琐的东西,一般应该在一开始就考虑进去。
      

  3.   

    我现在只想控制菜单啊.用最简单的visible方式。
    增加一个设置权限的过程SetPriv(username,MenuItem),在TMenu的Create事件中激活这个事件
    加进去 权限粒度:有个这种操作方式:who在what(db,menu,log...)上进行what操作(add,edit,query,view....)这样不什么粒度都解决了?
      

  4.   

    你在数据库中设定那些用户可以使用那些TAction过程,再在用户执行菜单时把TAction的值代进去在函数中校验看看是不是在它的权限范围内
    只有这样了
    TAction
      

  5.   

    如果你仅仅控制菜单权限的话,就把菜单和Action关联起来,然后再
    数据库里存储1010001这样的权限串,登陆后将权限串读取出来
    权限串中的每一位都对应一个Action的TAG,不如你读取到第三位是
    1那么Action中Tag为3的Enable设置为True,反之为False
      

  6.   

    上个星期,我做了权限管理的设计。
    思路:主要用actionlist进行管理(ActionManager也是可以的),把action作为权限分配给角色,然后把角色分给用户。系统初试化时,遍历一下用户的权限,如果actionname存在它的enabled就=true。
    权限数据库结构(oracle):
    1.systems(系统子系统表)我们的系统分多个子系统的
    sysid number(自增),sysname varchar2(50)
    2.Module(子系统模块表)
    ModuleID number(自增),ModuleName varchar2(50),SysID number 
    3.Privilege(权限表)
    PrivilegeID number (自增),ActionName varchar2(50),ActionCaption varchar2(50),
    ParentPrivilegeID number (父辈权限ID),moduleID number,SysID number
    4,roles(角色)
    RoleID number(自增),roleName varchar2(50)
    5.RolePrivilege(角色权限)
    RoleID,privilegeID首先做一个添加权限的程序
    哦,打完收工