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

📄 main.pas

📁 权限管理
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    SQLStr :=  'select Per_i,Per_Name,Per_dlmz,Per_dlmm from PMPerson ';
    SQLStr := SQLStr + 'where not((Per_dlmz is null) or (Per_dlmz='''')) ';
    SQLStr := SQLStr + 'order by Per_i';
    ExecQuery(DM.DSetUser, SQLStr);
    //FormatCDM.DSet( DM.DSet1 );
  except
    showErrMsg('数据库读写错误!');
  end;
end;

procedure TFrmMain.ShowUserIncPost;
var
  UserID:integer;
  SQLStr: string;
begin
  try
    if not ( DM.DSetUser.Active and ( DM.DSetUser.RecordCount > 0 ) ) then
    begin
      DM.DSetUserIncPost.Active := False ;
      Exit;
    end;
    UserID := DM.DSetUser.fieldbyName('Per_i').AsInteger ;
    SQLStr  := 'select a.* from PMjs a,PMryjs b '
       + 'where b.ryjs_ryi = ' + IntToStr(UserID)  + ' and '
       + 'b.ryjs_jsi = a.js_i '
       + 'order by a.js_mc';
    ExecQuery(DM.DSetUserIncPost, SQLStr);
  except
    showErrMsg('数据库读写错误!');
  end;
end;

procedure TFrmMain.ShowUserExPost;
var
  SQLStr: string;
  UserID: Integer;
begin
 try
    if not ( DM.DSetUser.Active and ( DM.DSetUser.RecordCount > 0 ) ) then
    begin
      DM.DSetUserExPost.Active := False ;
      Exit;
    end;
    UserID := DM.DSetUser.fieldbyName('Per_i').AsInteger ;
    SQLStr  := 'select * from PMjs where js_i not in '
       + ' (select a.js_i from  PMjs a,PMryjs b'
       + ' where b.ryjs_ryi = ' + IntToStr(UserID)  + ' and '
       + 'b.ryjs_jsi = a.js_i) '
       + 'order by js_mc';
    ExecQuery(DM.DSetUserExPost, SQLStr);
  except
    showErrMsg('数据库读写错误!');
  end;
end;

procedure TFrmMain.ShowUserIncPur;
var
  TempDS: TADODataSet;
  SQLStr,PurStr,tempStr: string;
  i,j: Integer;
begin
  TempDS := TADODataSet.Create(nil);
  TempDS.Connection := DM.ADOConnection1 ;
  try
    if not ( DM.DSetUser.Active and ( DM.DSetUser.RecordCount > 0 ) ) then
    begin
      DM.DSetUserIncPur.Active := False ;
      Exit;
    end;
    //查找用户包含的权限组
    SQLStr := 'select distinct a.gnz_gn ';
    SQLStr := SQLStr + 'from PMgnz a,PMjsgn b,PMryjs c ';
    SQLStr := SQLStr + 'where c.ryjs_ryi = '
      + DM.DSetUser.FieldByName('Per_i').AsString + ' and ';
    SQLStr := SQLStr + 'b.jsgn_gni = a.gnz_i and ';
    SQLStr := SQLStr + 'c.ryjs_jsi = b.jsgn_jsi';
    try
      ExecQuery(TempDS, SQLStr);
    except
      showErrMsg('数据库读写错误!');
    end;
    //返回用户对应的权限字符
    PurStr := '';
    with TempDS do
    begin
      if Active and (RecordCount > 0)  then
      begin
        First;
        while not Eof do
        begin
          tempStr := fieldByName('gnz_gn').AsString ;
          j := min(length(PurStr),length(tempStr));
          for i := 1 to j do
          begin
            PurStr[i] := chr(ord(PurStr[i]) or ord(tempStr[i]));
          end;
          if j<Length(tempStr) then
          begin
            Purstr := PurStr + copy(tempStr,j+1,length(tempStr)-j);
          end;
          Next;
        end;
      end;
    end;
    ReadPurInStr(DM.DSetUserIncPur,PurStr);
  finally
    TempDS.Free;
  end;
end;

procedure TFrmMain.UserAddPost;
var
  sSQL: string;
  i,recNo: Integer;
  ArrayOfSQL : TStrings ;
begin
  RecNo := DM.DSetUserExPost.RecNo ;
  ArrayOfSQL := nil;
  if DBGridUserExPost.Focused and (DM.DSetUserExPost.RecordCount > 0) then
  begin
    if DBGridUserExPost.SelectedRows.Count > 1 then
    begin
      try
        ArrayOfSQL := TStringList.Create ;
        for i := 0 to DBGridUserExPost.SelectedRows.Count - 1 do
        begin
          DBGridUserExPost.DataSource.DataSet.
            GotoBookmark(pointer(DBGridUserExPost.SelectedRows.Items[i]));
          sSQL := 'insert into PMryjs(ryjs_ryi,ryjs_jsi) values(';
          sSQL := sSQL + DM.DSetUser.FieldByName('Per_i').AsString + ',';
          sSQL := sSQL+DM.DSetUserExPost.FieldByName('js_i').AsString + ')';
          ArrayOfSQL.Add(sSQL);
        end;
        try
          BatchSQL(ArrayOfSQL);
        except
          showErrMsg('数据库读写错误!');
        end;
      finally
        ArrayOfSQL.Free ;
      end;
    end
    else
    begin
      sSQL := 'insert into PMryjs(ryjs_ryi,ryjs_jsi) values(';
      sSQL := sSQL + DM.DSetUser.FieldByName('Per_i').AsString + ',';
      sSQL := sSQL + DM.DSetUserExPost.FieldByName('js_i').AsString + ')';
      try
        ExecQuery2(sSQL);
      except
        showErrMsg('数据库读写错误!');
      end;
    end;
    ShowUserIncPost;
    ShowUserIncPur;
    ShowUserExPost ;
    if RecNo > DM.DSetUserExPost.RecordCount  then dec(recNo);
    if  not DM.DSetUserExPost.IsEmpty then
      DM.DSetUserExPost.RecNo := RecNo ;
  end;
end;

procedure TFrmMain.UserDelPost;
var
  sSQL: string;
  i,recNo: Integer;
  ArrayOfSQL : TStrings;
begin
  RecNo := DM.DSetUserIncPost.RecNo ;
  ArrayOfSQL := nil;
  if DBGridUserIncPost.Focused and (DM.DSetUserIncPost.RecordCount > 0) then
  begin
    if DBGridUserIncPost.SelectedRows.Count > 1 then
    begin
      try
        ArrayOfSQL := TStringList.Create;
        for i := 0 to DBGridUserIncPost.SelectedRows.Count - 1 do
        begin
          DBGridUserIncPost.DataSource.DataSet.
            GotoBookmark(pointer(DBGridUserIncPost.SelectedRows.Items[i]));
          sSQL := 'delete from PMryjs where ryjs_ryi = ';
          sSQL := sSQL + DM.DSetUser.FieldByName('Per_i').AsString
              + ' and ryjs_jsi = ';
          sSQL := sSQL + DM.DSetUserIncPost.FieldByName('js_i').AsString;
          ArrayOfSQL.Add(sSQL);
        end;
        try
          BatchSQL(ArrayOfSQL);
        except
          showErrMsg('数据库读写错误!');
        end;
      finally
        ArrayOfSQL.Free ;
      end;
    end
    else
    begin
      sSQL := 'delete from PMryjs where ryjs_ryi = ';
      sSQL := sSQL + DM.DSetUser.FieldByName('Per_i').AsString
        + ' and ryjs_jsi = ';
      sSQL := sSQL + DM.DSetUserIncPost.FieldByName('js_i').AsString;
      try
        ExecQuery2(sSQL);
      except
        showErrMsg('数据库读写错误!');
      end;
    end;
    ShowUserIncPost;
    ShowUserIncPur;
    ShowUserExPost ;
    if RecNo > DM.DSetUserIncPost.RecordCount  then dec(recNo);
    if  not DM.DSetUserIncPost.IsEmpty then
      DM.DSetUserIncPost.RecNo := RecNo ;
  end;
end;

procedure TFrmMain.DSLocalGroupDataChange(Sender: TObject;
  Field: TField);
begin
  if DM.DSetGroup.RecordCount > 0 then
  begin
    //显示权限组包含的权限
    ShowGroupIncPur;
    //显示权限组不包含的权限
    ShowGroupExPur;
  end;
end;

procedure TFrmMain.SpeedButton1Click(Sender: TObject);
begin
  UserAddPost;
end;

procedure TFrmMain.SpeedButton2Click(Sender: TObject);
begin
  UserDelPost;
end;

procedure TFrmMain.SpeedButton3Click(Sender: TObject);
begin
  PostAddGroup;
end;

procedure TFrmMain.SpeedButton4Click(Sender: TObject);
begin
  PostDelGroup;
end;

procedure TFrmMain.SpeedButton5Click(Sender: TObject);
begin
  GroupAddPur;
end;

procedure TFrmMain.SpeedButton6Click(Sender: TObject);
begin
  GroupDelPur;
end;

procedure TFrmMain.BtnNewUserClick(Sender: TObject);
begin
  AddNewUser;
//  ReadUserInfo;
end;

procedure TFrmMain.BtnDelUserClick(Sender: TObject);
begin
  DelUser;
end;

procedure TFrmMain.BtnNewPostClick(Sender: TObject);
begin
  AddNewPost;
end;

procedure TFrmMain.BtnDelPostClick(Sender: TObject);
begin
  DelPost;

end;

procedure TFrmMain.BtnNewGroupClick(Sender: TObject);
begin
  AddNewGroup;
  ShowPostIncGroup;
  ShowPostExGroup;
end;

procedure TFrmMain.BtnDelGroupClick(Sender: TObject);
begin
  DelGroup(DM.DSetGroup.FieldByName('gnz_i').AsInteger);
  
end;


procedure TFrmMain.DBGridUserDblClick(Sender: TObject);
var
  RecNo: Integer;
begin
  if DM.DSetUser.RecordCount <= 0 then Exit;
  RecNo := DM.DSetUser.RecNo;
  UpdateUser;
  ReadUserInfo;
  DM.DSetUser.RecNo := RecNo;
end;

procedure TFrmMain.DBGridPostDblClick(Sender: TObject);
begin
  if DM.DSetPost.RecordCount <= 0 then Exit;
    UpdatePost;
end;

procedure TFrmMain.DBGridGroupDblClick(Sender: TObject);
begin
  if DM.DSetGroup.RecordCount <= 0 then Exit;
    UpdateGroup;
end;

procedure TFrmMain.DBGridUserIncPostDblClick(Sender: TObject);
begin
  UserDelPost;
end;

procedure TFrmMain.DBGridUserExPostDblClick(Sender: TObject);
begin
  UserAddPost;
end;

procedure TFrmMain.DBGridPostExGroupDblClick(Sender: TObject);
begin
  PostAddGroup;
end;

procedure TFrmMain.DBGridPostIncGroupDblClick(Sender: TObject);
begin
  PostDelGroup;
end;

procedure TFrmMain.DBGridGroupExPurDblClick(Sender: TObject);
begin
  GroupAddPur;
end;

procedure TFrmMain.DBGridGroupIncPurDblClick(Sender: TObject);
begin
  GroupDelPur;
end;

procedure TFrmMain.PageCtrlPurDrawTab(
  Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect;
  Active: Boolean);
var
  sTitle : string;
  sControl : TControl;
  x, y : Integer;
begin

  if TabIndex > Control.ControlCount then
    Exit;

  sTitle := '';
  sControl := TPageControl( Control ).Pages[TabIndex];
  if sControl <> nil then
    sTitle := TTabSheet( sControl ).Caption
  else
    Exit;

  x := Control.Canvas.TextWidth( sTitle );
  x := Round( ( Rect.Right - Rect.Left - x ) / 2 );
  y := 4;
  Control.Brush.Color := $00FFF5F0;
  Control.Canvas.Font.Color := clNavy;
  Control.Canvas.TextRect( Rect, Rect.Left + x, Rect.Top + y, sTitle );

end;

procedure TFrmMain.DBGridUserExPostKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_LEFT ) and ( Shift = [ssCtrl]) then UserAddPost;
end;

procedure TFrmMain.DBGridUserIncPostKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_RIGHT) and (Shift = [ssCtrl]) then UserDelPost;
end;

procedure TFrmMain.DBGridPostExGroupKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_LEFT) and (Shift = [ssCtrl]) then PostAddGroup;
end;

procedure TFrmMain.DBGridPostIncGroupKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_RIGHT) and (Shift = [ssCtrl]) then PostDelGroup;
end;

procedure TFrmMain.DBGridGroupExPurKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_LEFT) and (Shift = [ssCtrl]) then GroupAddPur;
end;

procedure TFrmMain.DBGridGroupIncPurKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_RIGHT) and (Shift = [ssCtrl]) then GroupDelPur;
end;

procedure TFrmMain.DBGridUserIncPostCellClick(Column: TColumn);
begin
  DBGridUserExPost.SelectedRows.Clear;
end;

procedure TFrmMain.DBGridUserExPostCellClick(Column: TColumn);
begin
  DBGridUserIncPost.SelectedRows.Clear;
end;

procedure TFrmMain.DBGridPostIncGroupCellClick(Column: TColumn);
begin
  DBGridPostExGroup.SelectedRows.Clear;
end;

procedure TFrmMain.DBGridPostExGroupCellClick(Column: TColumn);
begin

  DBGridPostIncGroup.SelectedRows.Clear;

end;

procedure TFrmMain.DBGridGroupIncPurCellClick(Column: TColumn);
begin

  DBGridGroupExPur.SelectedRows.Clear;

end;

procedure TFrmMain.DBGridGroupExPurCellClick(Column: TColumn);
begin

  DBGridGroupIncPur.SelectedRows.Clear;

end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
  inherited;
  FormShow(Sender);
end;

procedure TFrmMain.DSLocalPostDataChange(Sender: TObject;
  Field: TField);
begin
  if DM.DSetPost.RecordCount > 0 then
  begin
    //显示岗位包含的权限组
    ShowPostIncGroup;
    //显示岗位不包含的权限组
    ShowPostExGroup;
    //显示岗位包含的权限
    ShowPostIncPur;
  end;
  inherited;

end;

procedure TFrmMain.DSLocalUserDataChange(Sender: TObject;
  Field: TField);
begin
  if DM.DSetUser.RecordCount > 0 then
  begin
    //显示岗位包含的权限组
    ShowUserIncPost ;
    //显示岗位不包含的权限组
    ShowUserExPost ;
    //显示岗位包含的权限
    ShowUserIncPur;
  end;
  inherited;

end;

procedure TFrmMain.SpeedButton7Click(Sender: TObject);
begin
  inherited;
  Close;
end;

end.

⌨️ 快捷键说明

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