⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_accessctrl.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//增加模块复制,权限更改跟踪功能
unit Sys_AccessCtrl;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, StdCtrls, Menus, Grids, DBGrids, Buttons, ExtCtrls,
  ImgList, ComCtrls, ToolWin, BaseIme, AdODB;

Type
  TFrm_Sys_AccessCtrl = Class(TFrm_BaseIme)
    Grid1: TStringGrid;
    Label1: TLabel;
    ControlBar1: TControlBar;
    ToolBar1: TToolBar;
    tlbtn_Copy: TToolButton;
    tlbtn_exit: TToolButton;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    cmbbx_user: TComboBox;
    Label2: TLabel;
    cmbbx_Module: TComboBox;
    Label4: TLabel;
    lbl_Duty: TLabel;
    btn_ok: TButton;
    ckbx_usermodule: TCheckBox;
    Label5: TLabel;
    edt_quickid: TEdit;
    Label6: TLabel;
    cmbbx_Dept: TComboBox;
    Label7: TLabel;
    lbl_Post: TLabel;
    AdoQry_Tmp1: TAdoQuery;
    AdoQry_Tmp2: TAdoQuery;
    AdoQry_Tmp3: TAdoQuery;
    tb_givemodule: TToolButton;
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure tlbtn_exitClick(Sender: TObject);
    procedure cmbbx_Change(Sender: TObject);
    procedure Grid1DblClick(Sender: TObject);
    procedure tlbtn_CopyClick(Sender: TObject);
    procedure Grid1KeyPress(Sender: TObject; var Key: ChAr);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: ChAr);
    procedure ckbx_usermoduleClick(Sender: TObject);
    procedure btn_okClick(Sender: TObject);
    procedure Grid1Enter(Sender: TObject);
    procedure Grid1DrawCell(Sender: TObject; ACol, Arow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure Grid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure tb_givemoduleClick(Sender: TObject);
  private
    bint:integer;
    p_menuType,p_title,p_table,p_menuidfieldName,p_Moduletable:string;
    userCode,userName:string;
    fReadOnly,gridempty:boolean;         //grid是否empty
    procedure emptygrid;       //清空grid
    procedure fillgrid;        //填充grid
    function  displayyn(aint:integer):string;  // 显示"是""否"
    procedure updatedb(YesNo:integer);     //更新数据库
    procedure openqr_menu;                //打开qr_menu
    procedure insertrec;                  //添加一条记录
    function  GetSysMenuId(SysMenuCode:string):integer;
    function  FoundAccess(SysMenuId:integer):integer;
  public
    Dept,user,module,Book:string;  //保存当前所维护的操作员、模块、帐套、操作员职务
    Sourceoid:string;    //从该操作员id复制权限
    SourceBook:string;    //从帐套复制权限
    procedure InitForm(AdoConnection:TAdoConnection;ReadOnly:boolean);
    procedure setSysParam(Param1:string;Param2:string;Param3:string;Param4:string);
  end;

var
  Frm_Sys_AccessCtrl: TFrm_Sys_AccessCtrl;

implementation

uses Sys_AccessCtrl_Copy,Sys_Global,Sys_GiveAccess;

{$R *.DFM}

procedure TFrm_Sys_AccessCtrl.FormCreate(Sender: TObject);
begin
  inherited;
//  Application.Createform(TFrm_Sys_AccessCtrl_Copy,Frm_Sys_AccessCtrl_Copy);
  Frm_Sys_AccessCtrl_Copy:= TFrm_Sys_AccessCtrl_Copy.Create(self);
  Dept:='';
  user:='';
  module:='';
  p_menuType:='';
  p_title:='';
  p_table:='SysMenuAccessCtrl';
  p_menuidfieldName:='SysMenuId';
  p_Moduletable:='SysModuleAccessCtrl';
  Frm_Sys_AccessCtrl.Caption:=p_title+Frm_Sys_AccessCtrl.Caption;
end;

procedure TFrm_Sys_AccessCtrl.FormActivate(Sender: TObject);
begin
  inherited;
  emptygrid;
  btn_ok.enabled:=False;
  ckbx_usermodule.enabled:=False;  //没选择条件之前不能改变是否可用该模块
  cmbbx_Dept.text:='';
  cmbbx_user.text:='';
  cmbbx_Module.text:='';
  cmbbx_Dept.SetFocus;
  tlbtn_Copy.enabled:=False;//没选择条件之前不能 copy
  tb_givemodule.Enabled :=tlbtn_Copy.Enabled ;
  with AdoQry_tmp1 do
  begin
    Close;
    sql.Text:='select * from Employee where EmployeeCode='''+userCode+'''';
    open;
    userName:=fieldbyname('EmployeeName').asstring;
  end;
  with AdoQry_Tmp1 do
  begin
    Close;
    sql.clear;
    sql.Add('select DeptCode as depArtmentid,'+
            '  DeptName as depArtmentName '+
            'from Dept Order by DeptCode');
    open;
    cmbbx_Dept.Items.clear;
    while not eof do
    begin
      cmbbx_Dept.Items.Add(fieldbyname('depArtmentid').asstring+' '+fieldbyname('depArtmentName').asstring);
      next;
    end;
  end;

  with AdoQry_Tmp1 do
  begin
    Close;
    sql.clear;
    sql.Add('select SysModuleCode as moduleid,'+
            '  SysModuleName as moduleName '+
            'from SysModule Order by Sysmoduleid ');
    open;
    First;
    cmbbx_Module.Items.clear;
    while not eof do
    begin
      cmbbx_Module.Items.Add(fieldbyname('moduleid').asstring+' '+fieldbyname('moduleName').asstring);
      next;
    end;
  end;
end;

procedure TFrm_Sys_AccessCtrl.emptygrid;
begin
  gridempty:=True;
  grid1.RowCount:=2;
  grid1.FixedRows:=1;
  grid1.Cells[0,0]:='菜单代码';
  grid1.Cells[1,0]:='菜  单  名  称';
  grid1.Cells[2,0]:='访问权限';
  grid1.Cells[0,1]:='';
  grid1.Cells[1,1]:='';
  grid1.Cells[2,1]:='';
end;

//填充grid,先根据menu填充grid,菜单名为'-'的项目填充"--",
//  然后根据menuCtrl填充每个菜单项的权限,可用的显示'是',
//  否则显示''
procedure TFrm_Sys_AccessCtrl.fillgrid;
var
  i,j,recCount:integer;
  str:string;//use to Add ' '
begin
  gridempty:=False;
  with AdoQry_Tmp2 do //找出模块MID上的所有菜单
  begin
    Close;
    sql.clear;
    sql.Add('select '+
            '  SysMenuCode  as datamenuid,'+
            '  PSysMenuCode as pdatamenuid,'+
            '  SysMenuName  as menuName '+
            'from SysMenu '+
            'where SysModuleCode=:modid '+
            'Order by SysMenuCode');
    Parameters.ParambyName('modid').Value:=getCode(cmbbx_Module.text);
    open;
    recCount:=recordCount;
    First;
    grid1.RowCount:=recCount+1;
    if recCount=0 then
    begin
      emptygrid;
      exit;
    end;  //若记录数为零,则不填grid
    for i:=1 to recCount do
    begin
      str:=stringofchAr(' ',(length(fieldbyname('datamenuid').asstring)-4));
      grid1.Cells[0,i]:=fieldbyname('datamenuid').asstring;
      grid1.Cells[1,i]:=str+fieldbyname('menuName').asstring;
      if (fieldbyname('menuName').asstring='-') then
        grid1.Cells[2,i]:='--'
      else
        grid1.Cells[2,i]:='';
      Next;
    end;

    openqr_menu; //实质是open qr_SysAccessCtrl
    First;
    for i:=1 to recCount do
    begin
      if fieldbyname('SysMenuCode').asstring=grid1.Cells[0,i] then
      begin
        if (grid1.Cells[2,i]<>'--') then
          grid1.Cells[2,i]:=displayyn(fieldbyname('canAccess').asinteger);
        next;
      end;
    end;
  end;
end;

procedure TFrm_Sys_AccessCtrl.tlbtn_exitClick(Sender: TObject);
begin
  //退出时将copy用的form释放
  Frm_Sys_AccessCtrl_Copy.release;
  modalResult:=mrok;
  Close;
end;

//每有条件变化时,button_ok才有效,checkbox无效
procedure TFrm_Sys_AccessCtrl.cmbbx_Change(Sender: TObject);
begin
  inherited;
  if (sender as tcombobox).Name='cmbbx_Dept' then
    with AdoQry_Tmp1 do
    begin
      Close;
      sql.clear;
      sql.Add('select a.EmployeeCode as userid,'+
              '  b.EmployeeName as userName '+
              'from Operator a,Employee b '+
              'where a.EmployeeCode=b.EmployeeCode '+
              '  and b.DeptCode='''+getCode(cmbbx_Dept.text)+''' '+
              '  and a.OperatorUsable=1 '+
              'Order by a.EmployeeCode');
      open;
      cmbbx_user.Items.clear;
      while not eof do
      begin
        cmbbx_user.Items.Add(fieldbyname('userid').asstring+' '+fieldbyname('userName').asstring);
        next;
      end;
    end;
  btn_ok.enabled:=True;
  ckbx_usermodule.enabled:=False;
  tlbtn_Copy.enabled:=False;
  tb_givemodule.Enabled :=tlbtn_Copy.Enabled ;  
end;

//显示内容为'是'、''时才可以改变
//模块可用时才可以改变
procedure TFrm_Sys_AccessCtrl.Grid1DblClick(Sender: TObject);
var aint:integer;
begin
  if (not gridempty) and (ckbx_usermodule.checked) and (not fReadOnly) then
    with grid1 do
      if (col=2) and (row<>0) then
      begin
        if Cells[Col, Row]='是' then
        begin
          Cells[Col, Row] :='';
          aint:=0;
          bint:=aint;
        end
        else if Cells[Col, Row]='' then
        begin
          Cells[Col, Row] :='是';
          aint:=1;
          bint:=aint;
        end
        else
          exit;
        updatedb(aint);
      end;

  inherited;
end;

function TFrm_Sys_AccessCtrl.displayyn(aint: integer): string;
begin
  if aint=1 then Result:='是'
  else Result:='';
end;

//改变SysAccessCtrl
procedure TFrm_Sys_AccessCtrl.updatedb(YesNo: integer);
begin
  if not AdoQry_Tmp2.locate('SysMenuId',GetSysMenuId(grid1.cells[0,grid1.row]),[])then
  begin
    insertrec;
    openqr_menu; //使openqr_menu恢复原状
    exit;
  end;
  with AdoQry_tmp1 do
  begin
    Close;
    sql.clear;
    sql.Add('update SysMenuAccessCtrl');
    sql.Add(  ' set canAccess=:newValue ');
    sql.Add(  ' where EmployeeCode=:uid ');
    sql.Add(  '   and SysMenuId=:menid');
    Parameters.ParambyName('newValue').Value:=YesNo;
    Parameters.ParambyName('menid').Value:=GetSysMenuId(grid1.Cells[0,grid1.row]);
    Parameters.ParambyName('uid').Value:=getCode(cmbbx_user.text);
    ExecSQL;
  end;
  with AdoQry_tmp1 do
  begin
     Close;
     sql.clear;
     sql.Add('insert SysMenuAccesslog (EmployeeCode,SysMenuid,action,Ctrl_EmployeeCode'+
             ',acttime) Values (:EmployeeCode,:SysMenuid,:action,:Ctrl_EmployeeCode'+
             ',getdate())');
    Parameters.ParambyName('EmployeeCode').Value:=getCode(cmbbx_user.text);
    Parameters.ParambyName('SysMenuid').Value:=GetSysMenuId(grid1.Cells[0,grid1.row]);
    if bint=1 then
      Parameters.ParambyName('action').Value:='授予'
     else
      Parameters.ParambyName('action').Value:='取消';
    Parameters.ParambyName('Ctrl_EmployeeCode').Value:=userCode+' '+userName;
    execsql;
  end;
end;

procedure TFrm_Sys_AccessCtrl.tlbtn_CopyClick(Sender: TObject);
begin
  inherited;
  grid1.setfocus;
  if Frm_Sys_AccessCtrl_Copy.Showmodal=mrok then
  begin
    if DispInfo('用户"'+getCode(cmbbx_user.text)+'"的权限将全部被用户"'+Sourceoid+'"的权限替代,确定吗?',2)='n' then
      exit;
    with AdoQry_tmp1 do
    begin
      //----在复制前先删除该用户的所有权限
      Close;
      sql.clear;
      sql.Add('delete SysMenuAccessCtrl '+
                 ' from (select SysMenuid '+
                          ' from SysMenu '+
                          ' where SysModuleCode='''+getCode(cmbbx_Module.Text)+''') as SysMenu '+
                 ' where SysMenuAccessCtrl.EmployeeCode='''+getCode(cmbbx_user.Text)+''' and '+
                       ' SysMenuAccessCtrl.SysMenuid=SysMenu.SysMenuid');
      execsql;
      //---给SysAccessCtrl添加记录
      Close;
      sql.clear;
      sql.Add('insert into SysMenuAccessCtrl '+
              '  (EmployeeCode,'+
              '   CanAccess,'+
              '   SysMenuid) '+
              'select '''+getCode(cmbbx_user.Text)+''','+
              '   Ctrl.CanAccess,'+
              '   Ctrl.SysMenuId '+
              'from SysMenuAccessCtrl as Ctrl, '+
                   '(select SysMenuid '+
                      ' from SysMenu '+
                      ' where SysModuleCode='''+getCode(cmbbx_Module.Text)+''') as SysMenu '+
              'where Ctrl.EmployeeCode='''+SourceOid+''' and '+
                    ' Ctrl.SysMenuid=SysMenu.SysMenuid ');
      execsql;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -