用Delphi 7 开发的系统想要根据登录用户的不同,设置某些功能对其是否可用,如:系统中有一个用户管理的功能,可以查询、增加、修改、删除用户资料,如果登录系统的是普通用户,则“用户管理”对其不可用,如果是管理员登录,则可用。
如果有许少量用户的身份是管理员,则可以直接判断登录系统的用户名,来进行上述设置。
如果将登录窗体的“用户名”传递到其他窗体以作判断,如欢迎窗体(欢迎XXX),主窗体?

解决方案 »

  1.   

    登陆用户及其权限放到全局变量备用。调用功能尽量使用:TAction,在 OnUpdate 事件中判断权限。
      

  2.   

    如果花些功夫,继承TAction,在其中添加权限判断方法,使用、维护起来更方便,而且以后遇到类似问题也比较好解决。
      

  3.   

    声明一个用户信息结构:
    Type
      TUserInfo=record
        FUserName:string[12];
        FUserPwd:string[12];
        FUserLogonTime:Tdatetime;
        FUserType:string[24];//用户权限或其他用途end;在主窗体中定义一个全局的用户信息变量
    var
      UserInfo:TUserInfo;
      

  4.   

    续楼上,
    定义全局变量
    var 
      UserInfo:TUserInfo;
    在要使用的窗体中调用mainform.UserInfo.FUserName就可以使用用户的姓名了
      

  5.   

    续楼上,对全局反感的话用属性type
      myWindow=TFrom
    ...
    private
      FUserInfo: TUserInfo;
    ...
    public
      property UserInfo: TUserInfo read FUserInfo write SetUserInfo;在调用窗口Show之前 UserInfo := CurrentInfo; 就可啦如果你的工程中所有窗口来自继承的话,这些代码不用每个都加
      

  6.   

    谢谢各位的帮忙,小北感激不尽!不过我自己已经实现了这一功能,在此也拿出来跟大家交流一下。*想不到一个小小的功能还有这么多实现方法。    我主要是想通过用户名来判断登录用户的权限,而权限记录在数据库中。也就是根据登录窗体传给系统主界面窗体的登录用户名,按用户名再向数据库中的用户表搜索其权限,如果为非管理员,则部分菜单项对其不可见。表结构如下:用户(用户名,密码,权限)    其中权限为字符值,长度为1位,利用约束,将其取值限制为0或1,默认值为0,即非管理员。  //...
      if(XX='1') then
      XXX.visible:=true;      //其中该菜单项的visible属性默认为false    而由于登录成功后要打开主界面窗体,已经在登录窗体的uses列表中引用了主界面窗体的。现在再由主窗体引用一个已经引用了它的窗体,引用上级窗体中的变量值。    为了不引起循环引用,后者引用前者是在 implementation 下面添加 uses unitX ,而前者引用后者就直接在interface 下面的uses 里添加引用。
      

  7.   

    续上这样,只需要在登录窗体定义一个全局变量,即可向另一个窗体传递这个保存用户名的变量了://...
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      
      usname:string;implementation//过程、函数等的具体定义和实现end.