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

📄 uuserattr.pas

📁 用户权限管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:

  cSqlStr := 'select * from T_004_L where V01=' + QuotedStr(GrpId) +
    ' order by V02,V03';
  with cds_SubMod do
  begin
    if Active then
      Active := false;
    XMLData := DM.FreeQuery(cSqlStr);
    Active := true;
  end;

  with cds_SubMod do
  begin
    first;
    while not eof do
    begin
      Node := GetRightNode(trim(fieldbyname('V02').AsString),
        trim(fieldbyname('V03').AsString));
      if Node <> nil then
        Node.Checked := true;
      next;
    end;
  end;
end;

function TfrmUserAttr.GetRightNode(const SysId, ModId: string): TfcTreeNode;
var
  i: integer;
begin
  result := nil;
  for i := 0 to TV_Sub.Items.Count - 1 do
  begin
    //模块ID level 为 1
    if TV_Sub.Items[i].Level = 1 then
      if (TV_Sub.Items[i].StringData = ModId) and
        (TV_Sub.Items[i].StringData2 = SysId) then
      begin
        result := TV_Sub.Items[i];
        break;
      end;
  end;
end;

procedure TfrmUserAttr.cxLookupComboBox1PropertiesChange(Sender: TObject);
var
  V01: string;
begin
  if trim(cxLookupComboBox1.Text) = '' then
    V01 := ''
  else
    V01 := trim(cxLookupComboBox1.EditValue);

  ClearRightTreeChecked;
  SetRightTreeFromUserGrp(V01);

end;

procedure TfrmUserAttr.cxRadioButton9Click(Sender: TObject);
begin
  TV_Sub.ReadOnly := false;
  cxLookupComboBox1.Enabled := false;
  RzButton7.Enabled := false;

  ClearRightTreeChecked;
  if not CurUser.IsNew then
    SetRightTreeFromUser(CurUser.V01);

end;

procedure TfrmUserAttr.ClearRightTreeChecked;
var
  i: integer;
begin
  for i := 0 to TV_Sub.Items.Count - 1 do
  begin
    if TV_Sub.Items[i].Level = 1 then
      TV_Sub.Items[i].Checked := false;
  end;
end;

procedure TfrmUserAttr.cxRadioButton8Click(Sender: TObject);
var
  V01: string;
begin
  TV_Sub.ReadOnly := true;
  cxLookupComboBox1.Enabled := true;
  RzButton7.Enabled := true;

  if trim(cxLookupComboBox1.Text) = '' then
    V01 := ''
  else
    V01 := trim(cxLookupComboBox1.EditValue);

  ClearRightTreeChecked;
  SetRightTreeFromUserGrp(V01);

end;

procedure TfrmUserAttr.SetUserRightFromTree(const UserId: string);
var
  i: integer;
begin
  DM.UserRightDel(UserId);
  for i := 0 to TV_Sub.Items.Count - 1 do
  begin
    if (TV_Sub.Items[i].Level = 1) and TV_Sub.Items[i].Checked then
      DM.UserRightAdd(UserId, TV_Sub.Items[i].StringData2,
        TV_Sub.Items[i].StringData);
  end;
end;

function TfrmUserAttr.GetSysAdminNode(const SysId: string): TfcTreeNode;
var
  i: integer;
begin
  result := nil;
  for i := 0 to TV_SubRight.Items.Count - 1 do
  begin
    if TV_SubRight.Items[i].Level = 1 then
      if TV_SubRight.Items[i].StringData = SysId then
      begin
        result := TV_SubRight.Items[i];
        break;
      end;
  end;
end;

procedure TfrmUserAttr.SetSysAdminTree;
var
  Node: TfcTreeNode;
  cSqlStr: string;
begin
  cSqlStr := 'select a.V01,a.V02,b.V03 from T_005_L2 a, T_001 b' +
    ' where a.V02 *= b.V01' +
    ' order by a.V01';
  with cds_SubMod do
  begin
    if Active then
      Active := false;
    XMLData := DM.FreeQuery(cSqlStr);
    Active := true;
  end;

  with cds_SubMod do
  begin
    first;
    while not eof do
    begin
      Node := GetSysAdminNode(trim(fieldbyname('V01').AsString));
      if (Node <> nil) and (trim(fieldbyname('V02').AsString) <> '') then
      begin
        Node.Text := Node.Text + '(' + trim(fieldbyname('V03').AsString) + ')';
        Node.StringData2 := trim(fieldbyname('V02').AsString);
        Node.Checked := true;
      end;
      next;
    end;
  end;
end;

procedure TfrmUserAttr.TV_SubRightToggleCheckbox(
  TreeView: TfcCustomTreeView; Node: TfcTreeNode);
begin
  // TV_SubRightToggleCheckbox 勾选事件可以由 鼠标点选 和 设置节点的 Node.Checked引起
  // 设置Clicked 变量是为了表明 ToggleCheckbox 是因为鼠标而触发,节点的 Node.Checked
  // 被置之不理
  if Clicked then
  begin
    Clicked := false;
    if Node.Checked then
    begin
      if trim(Node.StringData2) = '' then
      begin
        Node.StringData2 := CurUser.V01;
        Node.Text := '子系统管理员(' + CurUser.V03 + ')';
      end
      else
        Node.Checked := false;
    end
    else
    begin
      if trim(Node.StringData2) = CurUser.V01 then
      begin
        Node.StringData2 := '';
        Node.Text := '子系统管理员';
      end
      else
        Node.Checked := true;
    end;
  end;
end;

procedure TfrmUserAttr.TV_SubRightMouseDown(TreeView: TfcCustomTreeView;
  Node: TfcTreeNode; Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  Clicked := true;
end;

procedure TfrmUserAttr.TV_SubRightMouseUp(TreeView: TfcCustomTreeView;
  Node: TfcTreeNode; Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  Clicked := false;
end;

procedure TfrmUserAttr.RzButton1Click(Sender: TObject);
var
  i: smallint;
begin
  ModalResult := mrCancel;
  CurUser.V11 := trim(cxTextEdit1.Text);
  CurUser.V03 := trim(cxTextEdit2.Text);
  if CurUser.V03 = '' then
  begin
    TPublicFunc.ShowWarningMsg('用户姓名不能为空,请录入!');
    cxTextEdit2.SetFocus;
    exit;
  end;
  CurUser.V20 := trim(cxMemo1.Text);
  CurUser.V02 := trim(cxTextEdit3.Text);
  if CurUser.V02 = '' then
  begin
    TPublicFunc.ShowWarningMsg('用户登录名不能为空,请录入!');
    cxTextEdit3.SetFocus;
    exit;
  end;
  CurUser.V04 := trim(cxTextEdit4.Text);
  if cxRadioButton1.Checked then
    CurUser.V08 := 1
  else
    CurUser.V08 := 0;
  if cxRadioButton3.Checked then
  begin
    CurUser.V09 := 1;
    CurUser.V10 := '';
  end
  else
  begin
    CurUser.V09 := 0;
    CurUser.V10 := cxDateEdit1.EditText;
  end;
  if cxRadioButton7.Checked then
    CurUser.V12 := 2
  else if cxRadioButton6.Checked then
    CurUser.V12 := 1
  else
    CurUser.V12 := 0;
  if cxCheckBox1.Checked then
    CurUser.V13 := 1
  else
    CurUser.V13 := 0;
  if cxRadioButton9.Checked then
  begin
    CurUser.V16 := 1;
  end
  else
  begin
    CurUser.V16 := 0;
    CurUser.V17 := cxLookupComboBox1.EditValue;
  end;

  //将用户信息通过CurUser.SaveToDB进行存盘,成功返回 true, 失败返回 false
  if CurUser.SaveToDB then
  begin
    //如果用户为新增用户,则还要将用户添加到 用户组
    if CurUser.IsNew then
    begin
      if trim(CurUser.V31) <> '' then
        SetUserToGrp(trim(CurUser.V01), trim(CurUser.V31));
    end;

    if cxRadioButton9.Checked then
    begin
      // 如果用户权限为独立设置 则 设置用户权限
      SetUserRightFromTree(CurUser.V01);
      // 另 设置用户权限更改后的 统计信息  p_004L2_Chg
      DM.UserRightChg(CurUser.V01);
    end
    else
    begin
      //如果为组权限,则修改组权限
      if trim(cxLookupComboBox1.Text) <> '' then
        DM.GrpRightChg(trim(cxLookupComboBox1.EditValue));
    end;

    //先将用户邦定的IP地址清除,再重新添加到数据库
    DM.UserIPDel(trim(CurUser.V01));
    for i := 0 to length(EditAry) - 1 do
    begin
      if trim(EditAry[i].IP) <> '' then
        DM.UserIPAdd(trim(CurUser.V01), trim(EditAry[i].IP));
    end;

    //设置用户的管理员权限,过程里判断是否勾选
    SetAdminRight(CurUser.V01);
    ModalResult := mrOk;
  end
  else
    TPublicFunc.ShowWarningMsg('请检查登录名是否重复!');
end;

procedure TfrmUserAttr.cxTextEdit2Exit(Sender: TObject);
begin
  if trim(cxTextEdit2.Text) = '' then
    TPublicFunc.ShowWarningMsg('用户姓名不能为空,请录入!')
  else
  begin
    CurUser.V03 := trim(cxTextEdit2.Text);
    lab_Name.Caption := CurUser.V03;
  end;
end;

procedure TfrmUserAttr.cxTextEdit3Exit(Sender: TObject);
begin
  if trim(cxTextEdit3.Text) = '' then
    TPublicFunc.ShowWarningMsg('用户登录名不能为空,请录入!')
  else
  begin
    CurUser.V02 := trim(cxTextEdit3.Text);
    lab_LoginName.Caption := CurUser.V03;
  end;
end;

procedure TfrmUserAttr.SetAdminRight(const UserId: string);
var
  i: integer;
begin
  for i := 0 to TV_SubRight.Items.Count - 1 do
  begin
    if (TV_SubRight.Items[i].Level = 1) then
    begin
      if TV_SubRight.Items[i].Checked then
      begin
        if (trim(TV_SubRight.Items[i].StringData2) = 'NEW') or
          (trim(TV_SubRight.Items[i].StringData2) = UserId) then
          DM.SubRightChg(TV_SubRight.Items[i].StringData, UserId, '');
      end
      else
        DM.SubRightChg(TV_SubRight.Items[i].StringData, '', '');
    end;
  end;
end;

procedure TfrmUserAttr.SetUserToGrp(const UserId, GrpId: string);
begin
  DM.UserToGrp(GrpId, UserId);
end;

procedure TfrmUserAttr.RzPageControl1Click(Sender: TObject);
begin
  CurUser.V12 := 0;
  lab_LoginType.Caption := CurUser.V35;
end;

procedure TfrmUserAttr.cxRadioButton6Click(Sender: TObject);
begin
  CurUser.V12 := 1;
  lab_LoginType.Caption := CurUser.V35;
  ChangeLoginStat;
end;

procedure TfrmUserAttr.cxRadioButton7Click(Sender: TObject);
begin
  CurUser.V12 := 2;
  lab_LoginType.Caption := CurUser.V35;
  ChangeLoginStat;
end;

procedure TfrmUserAttr.cxRadioButton3Click(Sender: TObject);
begin
  CurUser.V09 := 1;
  lab_LimitDate.Caption := CurUser.V34;
end;

procedure TfrmUserAttr.cxRadioButton4Click(Sender: TObject);
begin
  CurUser.V09 := 0;
  lab_LimitDate.Caption := CurUser.V34;
end;

procedure TfrmUserAttr.RzButton4Click(Sender: TObject);
begin
  frmChangePwd := TfrmChangePwd.Create(nil);
  frmChangePwd.UserId := CurUser.V01;
  frmChangePwd.lab_Name.Caption := CurUser.V03;
  frmChangePwd.lab_LoginName.Caption := CurUser.V02;
  if frmChangePwd.ShowModal = mrOK then
    cxTextEdit4.Text := frmChangePwd.Pwd;
  frmChangePwd.Free;
end;

procedure TfrmUserAttr.RzButton3Click(Sender: TObject);
begin
  frmUserLog := TfrmUserLog.Create(nil);
  frmUserLog.iMod := 1;
  frmUserLog.UserId := CurUser.V01;
  frmUserLog.cxTextEdit1.Text := CurUser.V03;
  frmUserLog.ShowModal;
  frmUserLog.Free;
end;

procedure TfrmUserAttr.ChangeLoginStat;
begin
  if cxRadioButton5.Checked then
  begin
    //用户名+密码
    cxTextEdit5.Enabled := false;
    cxTextEdit6.Enabled := false;
    RzButton5.Enabled := false;
    RzButton6.Enabled := false;
  end
  else if cxRadioButton6.Checked then
  begin
    //用户名 + 口令卡密码
    cxTextEdit5.Enabled := true;
    cxTextEdit6.Enabled := false;
    RzButton5.Enabled := true;
    RzButton6.Enabled := true;
  end
  else if cxRadioButton7.Checked then
  begin
    //用户名 + 密码 + U卡
    cxTextEdit5.Enabled := false;
    cxTextEdit6.Enabled := true;
    RzButton5.Enabled := true;
    RzButton6.Enabled := false;
  end;

end;

procedure TfrmUserAttr.cxRadioButton5Click(Sender: TObject);
begin
  ChangeLoginStat;
end;

procedure TfrmUserAttr.RzButton5Click(Sender: TObject);
begin
  if cxRadioButton6.Checked then
  begin
    frmChangePwdCard := TfrmChangePwdCard.Create(nil);
    frmChangePwdCard.iMod := 0;
    if frmChangePwdCard.ShowModal = mrOK then
    begin
      if CurUser.ChangeCard(frmChangePwdCard.NewId) then
        cxTextEdit5.Text := frmChangePwdCard.NewId;

    end;
    frmChangePwdCard.Free;
  end;
end;

procedure TfrmUserAttr.RzButton6Click(Sender: TObject);
var
  CardId: string;
begin
  CardId := trim(cxTextEdit5.Text);
  if CardId <> '' then
  begin
    if cds_Card.Active then
      cds_Card.Active := false;
    cds_Card.XMLData := DM.FreeQuery('Q_Card ' + Quotedstr(CardId));
    cds_Card.Active := true;
    frmCustomReport := TfrmCustomReport.Create(nil);
    frmCustomReport.AddDataSetX('Card', cds_Card.XMLData, '', -1, '');
    frmCustomReport.ReportFileName := '口令卡打印报表.rmf';
    frmCustomReport.ShowModal;
    frmCustomReport.Free;
  end;
end;

procedure TfrmUserAttr.XP_IpEdit1Exit(Sender: TObject);
begin
  if not cxCheckBox1.Checked then
    exit;
  if trim((Sender as TXP_IpEdit).IP) = '' then
    exit;
  NewIpEdit;
end;

procedure TfrmUserAttr.NewIpEdit;
var
  i: smallint;
begin
  //IP控件数限制为6个
  if length(EditAry) < 6 then
  begin
    //如果所有现存IP控件有未设置的,则不允许生成新控件
    for i := 0 to length(EditAry) - 1 do
    begin
      if trim(EditAry[i].IP) = '' then
        exit;
    end;

    //生成IP控件,保存为数组元素
    i := length(EditAry);
    setlength(EditAry, i + 1);
    EditAry[i] := TXP_IpEdit.Create(self);

    EditAry[i].Parent := RzGroupBox4;
    with EditAry[i] do
    begin
      Left := 171;
      Top := 112 + 25 * i;
      Width := 150;
      Height := 21;
      ParentFont := False;
      Font.Charset := GB2312_CHARSET;
      Font.Color := clBlack;
      Font.Height := -12;
      Font.Name := '宋体';
      Font.Style := [];
      Color := clWhite;
      TabOrder := 6 + i;
      //为新生成IP控件设置退出方法
      OnExit := XP_IpEdit1Exit;
    end;
  end;
end;

end.

⌨️ 快捷键说明

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