zoukankan      html  css  js  c++  java
  • Delphi利用TActionList实现权限控制

    前段时间开始学习Delphi数据库编程,在程序设计中需要加入【权限控制】的功能,上网找了一些资料,大家实现这个功能的方法有很多,不过网上提供的资料基本上都很混乱,估计是一次又一次的转载的时候丢失了很多信息。
        我们只需利用Delphi提供的TActionList控件就可以很容易的实现权限控制功能。通过TActionList,应用程序可以统一管理其 TAction,这里的Action,可以理解为应用程序的功能。在应用的设计期间,可以通过TActionList编辑器将功能(Action)加入 TActionList,将Action加入TActionList后,就可能通过Object Inspector设置Action的属性或为其建立事件句柄。当要限定某一功能时,可能利用TAction的Enabled,将其设为False,此功 能对于用户将被屏蔽掉,如果要此功能对用户不可见,则可以设定Visible为False。
        具体实现办法:

    第一步:建立用户信息表,储存用户信息。

    用户信息表User的结构如下:

    字段名称 字段类型 说明
    UsrID string  用户的ID,为表的关键字
    UsrName string  用户名称(姓名)
    UsrPwd string 用户密码
    UsrRight string 用户权限(也可以设置成Interger)

    第二步:在程序主界面单元里面定义全局变量OperatorName、OperatorRight和全局过程ChkRight,在登录单元内获取权限字符串后赋值给OpertorRight。

    frmLogin单元:

    OperatorRight := ADOQuery1.FieldByName('UsrRight').AsString;

    frmMain单元:

    var
      frmMain: TfrmMain;
      OperatorName, OperatorRight: string;          //用户名、权限
      procedure ChkRight(strRight: string);         //权限检查
    implementation

    uses uLogin;

    {$R *.dfm}

    //==============================================================================
    // 检查用户权限
    //==============================================================================


    procedure ChkRight(strRight: string);
    var
      i, num: Integer;
      blRight: Boolean;
    begin
      with frmMain do
      begin
        // string[i]没有 0 ,所以循环从 1 开始
        for i := 1 to Length(strRight) do
        begin
          //设置Actions是否显示,以此来控制用户权限
          blRight := strRight[i] = '1';
          TAction(actlstMain.Actions[i-1]).Visible := blRight;
        end;
      end;
    end;

    procedure TfrmMain.FormActivate(Sender: TObject);
    begin
      ChkRight(OperatorRight);                       //检查用户权限
    end;

  • 相关阅读:
    MongoDB的安全写入GetLastError
    mysql更新字段部分内容,连接条件过滤
    markdown 语法练习(样式输出)
    markdown 语法练习
    数据科学家访谈录 摘录(二)
    使用docker容器,创建镜像
    docker contioner报错:locale.Error: unsupported locale setting
    psql: FATAL: database "" does not exist 解决步骤
    ubuntu下docker 安装、使用mysql
    ubuntu使用crontab启动定时任务
  • 原文地址:https://www.cnblogs.com/weixing/p/2099760.html
Copyright © 2011-2022 走看看