📄 unitacl.pas
字号:
{ACL管理器单元}
unit UnitACL;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons,XMLIntf,XMLDoc,xmldom,msxmldom,
CheckLst, DB, DBClient, Provider, Xmlxform, Grids, DBGridEh, Menus,UnitActionList,
DBCtrls,Activex,ModuleIntf, ACLIntf, DBGrids; //需要引用到ActiveX单元
type
TFrmACL = class(TForm)
PanelMain: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
BitBtn9: TBitBtn;
BitBtn8: TBitBtn;
BitBtn6: TBitBtn;
BitBtn5: TBitBtn;
BitBtn2: TBitBtn;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
S1: TMenuItem;
PopupMenu2: TPopupMenu;
A1: TMenuItem;
D1: TMenuItem;
Panel4: TPanel;
TabSheet3: TTabSheet;
BitBtn12: TBitBtn;
BitBtn13: TBitBtn;
PopupMenu3: TPopupMenu;
N3: TMenuItem;
N4: TMenuItem;
Panel3: TPanel;
GroupBox1: TGroupBox;
DBGridEh1: TDBGridEh;
Panel6: TPanel;
GroupBox2: TGroupBox;
DBGridEh2: TDBGridEh;
Panel8: TPanel;
GroupBox5: TGroupBox;
DBGridEh5: TDBGridEh;
BitBtn14: TBitBtn;
BitBtn15: TBitBtn;
Panel9: TPanel;
GroupBox3: TGroupBox;
DBGridEh4: TDBGridEh;
BitBtn16: TBitBtn;
BitBtn17: TBitBtn;
BitBtn18: TBitBtn;
BitBtn19: TBitBtn;
BitBtn20: TBitBtn;
BitBtn21: TBitBtn;
M1: TMenuItem;
F1: TMenuItem;
M2: TMenuItem;
F2: TMenuItem;
M3: TMenuItem;
F3: TMenuItem;
PopupMenu4: TPopupMenu;
S2: TMenuItem;
PopupMenu5: TPopupMenu;
S3: TMenuItem;
BitBtn22: TBitBtn;
Panel7: TPanel;
GroupBox4: TGroupBox;
DBGridEh3: TDBGridEh;
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure BitBtn8Click(Sender: TObject);
procedure BitBtn9Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure P1Click(Sender: TObject);
procedure S1Click(Sender: TObject);
procedure A1Click(Sender: TObject);
procedure D1Click(Sender: TObject);
procedure P2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DBGridEh1CellClick(Column: TColumnEh);
procedure BitBtn14Click(Sender: TObject);
procedure BitBtn15Click(Sender: TObject);
procedure BitBtn16Click(Sender: TObject);
procedure BitBtn17Click(Sender: TObject);
procedure BitBtn18Click(Sender: TObject);
procedure BitBtn19Click(Sender: TObject);
procedure BitBtn20Click(Sender: TObject);
procedure BitBtn21Click(Sender: TObject);
procedure DBGridEh2CellClick(Column: TColumnEh);
procedure AfterDataSetChanged;
private
FIMsgAreaIntf : IMessageAreaIntf;
procedure processScroll(Sender : TObject);
{ Private declartions }
public
property MsgAreaIntf : IMessageAreaIntf read FIMsgAreaIntf write FIMsgAreaIntf;
{ Public declarations }
end;
var
FrmACL: TFrmACL;
implementation
uses UnitDataM;
{$R *.dfm}
procedure TFrmACL.BitBtn1Click(Sender: TObject);
begin
{with TfrmSel.CreateNew(self, [Dbgrideh1.SelectedField.text]) do
begin
ShowModal;
free;
end; }
end;
procedure TFrmACL.BitBtn4Click(Sender: TObject);
begin
close;
end;
procedure TFrmACL.BitBtn3Click(Sender: TObject);
begin
close;
end;
procedure TFrmACL.BitBtn5Click(Sender: TObject);
begin //增加角色
{Application.CreateForm(TFrmAddRole,FrmAddRole);
FrmAddRole.ShowModal;
FrmAddRole.Free; }
end;
procedure TFrmACL.BitBtn6Click(Sender: TObject);
var //删除角色
rolelist:IXMLDocument;
rolelistnode,subnode:IXMLNode;
Delid:string;
i,count:integer;
begin
{if MessageBox(Self.Handle,'您确定要删除该角色吗?','ACL管理器',MB_OKCANCEL) = 2 then
exit;
rolelist := TXMLDocument.Create(DataM.Filename + '\rolelist.xml');
rolelist.Active := true;
Delid := DBGridEh1.SelectedField.Text;
rolelistnode := rolelist.DocumentElement;
i := 0;
count := rolelistnode.ChildNodes.Count;
while i<count do
begin
subnode := rolelistnode.ChildNodes.Nodes[i];
if subnode.Attributes['id'] = Delid then
break;
Inc(i);
end;
rolelistnode.ChildNodes.Delete(i);
rolelist.SaveToFile(DataM.Filename + '\rolelist.xml');
rolelist.Active := false;
DataM.RoleListDataSet.Active := false;
DataM.RoleListDataSet.Active := true; }
end;
procedure TFrmACL.BitBtn2Click(Sender: TObject);
begin //该角色对应的用户
{ with TFrmRole_User.CreateNew(self, [Dbgrideh1.SelectedField.text]) do
begin
ShowModal;
free;
end; }
end;
procedure TFrmACL.BitBtn7Click(Sender: TObject);
begin //该用户对应的角色
{with TFrmRoleAccess.CreateNew(self, [Dbgrideh2.SelectedField.text]) do
begin
ShowModal;
free;
end;}
end;
procedure TFrmACL.BitBtn8Click(Sender: TObject);
begin //增加用户
{Application.CreateForm(TFrmAddUser,FrmAddUser);
FrmAddUser.ShowModal;
FrmAddUser.Free;}
end;
procedure TFrmACL.BitBtn9Click(Sender: TObject);
var //删除该用户
userlist:IXMLDocument;
userlistnode,subnode:IXMLNode;
Delid:string;
i,count:integer;
begin
{if MessageBox(Self.Handle,'您确定要删除该用户吗?','ACL管理器',MB_OKCANCEL) = 2 then
exit;
userlist := TXMLDocument.Create(DataM.Filename + '\userlist.xml');
userlist.Active := true;
Delid := DBGridEh2.SelectedField.Text;
userlistnode := userlist.DocumentElement;
i := 0;
count := userlistnode.ChildNodes.Count;
while i<count do
begin
subnode := userlistnode.ChildNodes.Nodes[i];
if subnode.ChildNodes.FindNode('ID').Text = Delid then
break;
Inc(i);
end;
userlistnode.ChildNodes.Delete(i);
userlist.SaveToFile(DataM.Filename + '\userlist.xml');
userlist.Active := false;
DataM.UserListDataSet.Active := false;
DataM.UserListDataSet.Active := true; }
end;
procedure TFrmACL.N1Click(Sender: TObject);
begin //增加用户
{Application.CreateForm(TFrmAddUser,FrmAddUser);
FrmAddUser.ShowModal;
FrmAddUser.Free; }
end;
procedure TFrmACL.N2Click(Sender: TObject);
var //删除角色
rolelist:IXMLDocument;
rolelistnode,subnode:IXMLNode;
Delid:string;
i,count:integer;
begin
{if MessageBox(Self.Handle,'您确定要删除该角色吗?','ACL管理器',MB_OKCANCEL) = 2 then
exit;
rolelist := TXMLDocument.Create(DataM.Filename + '\rolelist.xml');
rolelist.Active := true;
Delid := DBGridEh1.SelectedField.Text;
rolelistnode := rolelist.DocumentElement;
i := 0;
count := rolelistnode.ChildNodes.Count;
while i<count do
begin
subnode := rolelistnode.ChildNodes.Nodes[i];
if subnode.Attributes['id'] = Delid then
break;
Inc(i);
end;
rolelistnode.ChildNodes.Delete(i);
rolelist.SaveToFile(DataM.Filename + '\rolelist.xml');
rolelist.Active := false;
DataM.RoleListDataSet.Active := false;
DataM.RoleListDataSet.Active := true; }
end;
procedure TFrmACL.P1Click(Sender: TObject);
begin
{ with TfrmSel.CreateNew(self, [Dbgrideh1.SelectedField.text ,DataM.Filename]) do
begin
ShowModal;
free;
end; }
end;
procedure TFrmACL.S1Click(Sender: TObject);
begin //该用户对应的角色
{with TFrmRole_User.CreateNew(self, [Dbgrideh1.SelectedField.text,DataM.Filename]) do
begin
ShowModal;
free;
end; }
end;
procedure TFrmACL.A1Click(Sender: TObject);
begin //增加
{ Application.CreateForm(TFrmAddUser,FrmAddUser);
FrmAddUser.ShowModal;
FrmAddUser.Free; }
end;
procedure TFrmACL.D1Click(Sender: TObject);
var //删除该用户
userlist:IXMLDocument;
userlistnode,subnode:IXMLNode;
Delid:string;
i,count:integer;
begin
{if MessageBox(Self.Handle,'您确定要删除该用户吗?','ACL管理器',MB_OKCANCEL) = 2 then
exit;
userlist := TXMLDocument.Create(DataM.Filename + '\userlist.xml');
userlist.Active := true;
Delid := DBGridEh2.SelectedField.Text;
userlistnode := userlist.DocumentElement;
i := 0;
count := userlistnode.ChildNodes.Count;
while i<count do
begin
subnode := userlistnode.ChildNodes.Nodes[i];
if subnode.ChildNodes.FindNode('ID').Text = Delid then
break;
Inc(i);
end;
userlistnode.ChildNodes.Delete(i);
userlist.SaveToFile(DataM.Filename + '\userlist.xml');
userlist.Active := false;
DataM.UserListDataSet.Active := false;
DataM.UserListDataSet.Active := true;}
end;
procedure TFrmACL.P2Click(Sender: TObject);
begin
{with TFrmRoleAccess.CreateNew(self, [Dbgrideh2.SelectedField.text ,DataM.Filename]) do
begin
ShowModal;
free;
end; }
end;
procedure TFrmACL.FormCreate(Sender: TObject);
begin
DBGridEh1.DataSource := DataM.RoleListDataSource;
DBGridEh1.DataSource.DataSet.Active := true;
DBGridEh2.DataSource := DataM.UserListDataSource;
DBGridEh2.DataSource.DataSet.Active := true;
DBGridEh4.DataSource := DataM.PermissionMDataSource;
DBGridEh4.DataSource.DataSet.Active := true;
DBGridEh3.DataSource := DataM.PermissionListDataSource;
DBGridEh3.DataSource.DataSet.Active := true;
DBGridEh3.DataSource.DataSet.Fields.Fields[0].ReadOnly := true;
DBGridEh3.DataSource.DataSet.Fields.Fields[3].ReadOnly := true;
DBGridEh5.DataSource := DataM.RoleAccessDataSource;
DBGridEh5.DataSource.DataSet.Active := true;
DBGridEh5.DataSource.DataSet.Fields.Fields[0].ReadOnly := true;
DBGridEh5.DataSource.DataSet.Fields.Fields[1].ReadOnly := true;
DBGridEh1.AutoFitColWidths := true;
DBGridEh2.AutoFitColWidths := true;
DBGridEh3.AutoFitColWidths := true;
DBGridEh4.AutoFitColWidths := true;
DBGridEh5.AutoFitColWidths := true;
DataM.OnDataSetScroll := processScroll;
DataM.RoleListDataSet.First;
DataM.UserListDataSet.First;
//*******************给表格添加列名******************************************//
AfterDataSetChanged;
{ DBGridEh1.Columns[0].Title.Caption := '角色ID';
DBGridEh1.Columns[1].Title.Caption := '中文名称';
DBGridEh3.Columns[0].Title.Caption := '权限代码';
DBGridEh3.Columns[1].Title.Caption := '可读';
DBGridEh3.Columns[2].Title.Caption := '可写';
DBGridEh3.Columns[3].Title.Caption := '中文描述';
DBGridEh2.Columns[0].Title.Caption := '用户ID';
DBGridEh2.Columns[1].Title.Caption := '中文名称';
DBGridEh5.Columns[0].Title.Caption := '角色ID';
DBGridEh5.Columns[1].Title.Caption := '中文名称';
DBGridEh5.Columns[2].Title.Caption := '是否拥有该角色';
DBGridEh4.Columns[0].Title.Caption := '权限ID';
DBGridEh4.Columns[1].Title.Caption := '中文描述'; }
//**************************************************************************//
end;
procedure TFrmACL.DBGridEh1CellClick(Column: TColumnEh);
var
rolelist,permissionlist:IXMLDocument;
rolelistnode,permissionlistnode:IXMLNode;
subnode,grandnode,subnode1 : IXMLNode;
i,count: integer;
begin
if DataM.RoleListDataSet.Eof then exit;
//////////////将选中角色的权限赋给权限列表/////////////////////////////////////
DataM.PermissionListDataSet.Active := true;
// rolelist := TXMLDocument.Create(DataM.Filename + '\rolelist.xml');
rolelist := TXMLDocument.Create(nil);
rolelist.LoadFromFile(DataM.Filename + '\rolelist.xml');
rolelist.Active := true;
rolelist.Options := rolelist.Options + [doNodeAutoIndent];
rolelist.NodeIndentStr := ' ';
rolelist.Version := '1.0';
rolelistnode := rolelist.DocumentElement;
i := 0;
while(i < rolelistnode.ChildNodes.Count ) do
begin
subnode := rolelistnode.ChildNodes.Nodes[i];
if subnode.Attributes['id'] = Dbgrideh1.selectedfield.text then
break;
Inc(i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -