小弟,真诚的希望大家能帮一帮我,权限设计源码,这是俺最后60分,祝大家在新的一年里
六六大顺,四季发财。谢谢各位热情的参与,谢谢
suizhou888@163.com
9 个解决方案
#1
procedure TF_LOGO.BitBtn1Click(Sender: TObject);
begin
data1.ADOQuery1.Close;
data1.ADOQuery1.SQL.Clear;
data1.ADOQuery1.SQL.Add('select * from 用户 where (用户名="'+flatedit1.Text+'") and (密码="'+FlatMaskEdit1.Text+'")');
data1.adoquery1. open;
if data1.adoquery1.recordcount=1 then
begin
if data1.ADOQuery1.FieldValues['权限']=0 then //权限设置
begin
f_index.N4.Visible:=false;
f_index.ToolButton5.Visible:=false;
end;
f_index.StatusBar1.Panels[2].Text:=' '+data1.ADOQuery1.FieldValues['用户名'];
data1.GS.Active:=false;
data1.GS.Active:=true;
f_index.StatusBar1.Panels[5].Text:=' '+data1.GS.FieldValues['商店名']+' 联系电话: '+data1.GS.FieldValues['电话'];
f_logo.Hide;
f_index.Show;
end else
showmessage('用户名或密码,不正确,请重新输入!') ;
flatedit1.Text:='';
FlatMaskEdit1.Text:='';
end;
begin
data1.ADOQuery1.Close;
data1.ADOQuery1.SQL.Clear;
data1.ADOQuery1.SQL.Add('select * from 用户 where (用户名="'+flatedit1.Text+'") and (密码="'+FlatMaskEdit1.Text+'")');
data1.adoquery1. open;
if data1.adoquery1.recordcount=1 then
begin
if data1.ADOQuery1.FieldValues['权限']=0 then //权限设置
begin
f_index.N4.Visible:=false;
f_index.ToolButton5.Visible:=false;
end;
f_index.StatusBar1.Panels[2].Text:=' '+data1.ADOQuery1.FieldValues['用户名'];
data1.GS.Active:=false;
data1.GS.Active:=true;
f_index.StatusBar1.Panels[5].Text:=' '+data1.GS.FieldValues['商店名']+' 联系电话: '+data1.GS.FieldValues['电话'];
f_logo.Hide;
f_index.Show;
end else
showmessage('用户名或密码,不正确,请重新输入!') ;
flatedit1.Text:='';
FlatMaskEdit1.Text:='';
end;
#2
可以用action的tag值做权限
#3
我是用MenuItem.Caption做的
优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
缺点:MenuItem.Caption重复就不准了
优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
缺点:MenuItem.Caption重复就不准了
#4
>>我是用MenuItem.Caption做的
>>优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
>>缺点:MenuItem.Caption重复就不准了
那不如用MenuItem.Name来做,只不过多了一重MenuItem.Name对应MenuItem.Caption的手续罢了
>>优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
>>缺点:MenuItem.Caption重复就不准了
那不如用MenuItem.Name来做,只不过多了一重MenuItem.Name对应MenuItem.Caption的手续罢了
#5
我的一贯做法
-------------------
1,分两种使用者,管理员和一般用户,管理员可以设置普通用户所具有的权限!
2,用户在登陆的时候由程序去判断用户类型,
管理员没有限制
如是普通用户,则在进行数据库的各个表的修改,更新,删除等操作(一般是可以查询的)的时候,去“权限表”判断该操作是否存在,如是,继续,否则,停止该操作!
“权限表”是数据库中一个独立的表,管理者在设置普通用户权限的时候就对这个表进行操作,具有某个权限,就把这个权限的代码输入这个表,否则从该表删除,查询的时候就去看该表中是否存在某操作的代号,决定普通用户执行该操作的可行性
-------------------
1,分两种使用者,管理员和一般用户,管理员可以设置普通用户所具有的权限!
2,用户在登陆的时候由程序去判断用户类型,
管理员没有限制
如是普通用户,则在进行数据库的各个表的修改,更新,删除等操作(一般是可以查询的)的时候,去“权限表”判断该操作是否存在,如是,继续,否则,停止该操作!
“权限表”是数据库中一个独立的表,管理者在设置普通用户权限的时候就对这个表进行操作,具有某个权限,就把这个权限的代码输入这个表,否则从该表删除,查询的时候就去看该表中是否存在某操作的代号,决定普通用户执行该操作的可行性
#6
To Kshape_zh(伟大的大伟//[给我个支点、我就可以翘起整个地球仪!])
兄弟,能否提供一下表结构,相关Code啊,谢谢,分不够再加,说心里话,你让我太感动了
兄弟,能否提供一下表结构,相关Code啊,谢谢,分不够再加,说心里话,你让我太感动了
#7
hihuang(九哥)
下面是我的全部权限控制单元代码了
但是很遗憾,我的DLL找不到了
--------------------------
//其中的checkbox的个数代表你操作的个数
//根据你的程序自己修改
//在其他地方,就用CanDo函数,根据操作代号去做检测就可以了
//我的数据库只有一个字段ControlName(integer)--取0或者1
unit UserManageUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB;
type
TUserManageForm = class(TForm)
Bevel3: TBevel;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Label2: TLabel;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
GroupBox2: TGroupBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
GroupBox3: TGroupBox;
CheckBox10: TCheckBox;
CheckBox11: TCheckBox;
CheckBox12: TCheckBox;
GroupBox4: TGroupBox;
CheckBox8: TCheckBox;
CheckBox9: TCheckBox;
GroupBox5: TGroupBox;
CheckBox7: TCheckBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
UserManageForm: TUserManageForm;
implementation
uses LogUnit,SystemSetUnit;
{$R *.dfm}
//
function DeleteAllControl(ADOQuery1:TADOQuery):boolean;far external 'UserManage.dll';
function UpdateUser(ADOQuery1:TADOQuery;C:integer):boolean;far external 'UserManage.dll';
function CanDo(ADOQuery1:TADOQuery;C:integer):boolean;far external 'UserManage.dll'
//
procedure TUserManageForm.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TUserManageForm.Button2Click(Sender: TObject);
//修改权限
begin
if Application.MessageBox('你确定要更改普通用户操作权限吗?','权限设置',MB_YESNO+MB_ICONQUESTION) = IDNO then
begin
Self.OnShow(Sender);
Exit;
end;
DeleteAllControl(Self.ADOQuery1);
if(Self.CheckBox1.Checked = true) then
UpdateUser(Self.ADOQuery1,1);
if(Self.CheckBox2.Checked = true) then
UpdateUser(Self.ADOQuery1,2);
if(Self.CheckBox3.Checked = true) then
UpdateUser(Self.ADOQuery1,3);
if(Self.CheckBox4.Checked = true) then
UpdateUser(Self.ADOQuery1,4);
if(Self.CheckBox5.Checked = true) then
UpdateUser(Self.ADOQuery1,5);
if(Self.CheckBox6.Checked = true) then
UpdateUser(Self.ADOQuery1,6);
if(Self.CheckBox7.Checked = true) then
UpdateUser(Self.ADOQuery1,7);
if(Self.CheckBox8.Checked = true) then
UpdateUser(Self.ADOQuery1,8);
if(Self.CheckBox9.Checked = true) then
UpdateUser(Self.ADOQuery1,9);
if(Self.CheckBox10.Checked = true) then
UpdateUser(Self.ADOQuery1,10);
if(Self.CheckBox11.Checked = true) then
UpdateUser(Self.ADOQuery1,11);
if(Self.CheckBox12.Checked = true) then
UpdateUser(Self.ADOQuery1,12);
Application.MessageBox('系统设置成功,请继续操作','权限设置',MB_OK+MB_ICONINFORMATION);
Close;
end;
procedure TUserManageForm.FormShow(Sender: TObject);
//显示已经设置的权限
begin
Self.CheckBox1.Checked := false;
Self.CheckBox2.Checked := false;
Self.CheckBox3.Checked := false;
Self.CheckBox4.Checked := false;
Self.CheckBox5.Checked := false;
Self.CheckBox6.Checked := false;
Self.CheckBox7.Checked := false;
Self.CheckBox8.Checked := false;
Self.CheckBox9.Checked := false;
Self.CheckBox10.Checked := false;
Self.CheckBox11.Checked := false;
Self.CheckBox12.Checked := false;
if CanDo(Self.ADOQuery1,1) = true then
Self.CheckBox1.Checked := true;
if CanDo(Self.ADOQuery1,2) = true then
Self.CheckBox2.Checked := true;
if CanDo(Self.ADOQuery1,3) = true then
Self.CheckBox3.Checked := true;
if CanDo(Self.ADOQuery1,4) = true then
Self.CheckBox4.Checked := true;
if CanDo(Self.ADOQuery1,5) = true then
Self.CheckBox5.Checked := true;
if CanDo(Self.ADOQuery1,6) = true then
Self.CheckBox6.Checked := true;
if CanDo(Self.ADOQuery1,7) = true then
Self.CheckBox7.Checked := true;
if CanDo(Self.ADOQuery1,8) = true then
Self.CheckBox8.Checked := true;
if CanDo(Self.ADOQuery1,9) = true then
Self.CheckBox9.Checked := true;
if CanDo(Self.ADOQuery1,10) = true then
Self.CheckBox10.Checked := true;
if CanDo(Self.ADOQuery1,11) = true then
Self.CheckBox11.Checked := true;
if CanDo(Self.ADOQuery1,12) = true then
Self.CheckBox12.Checked := true;
end;
end.
下面是我的全部权限控制单元代码了
但是很遗憾,我的DLL找不到了
--------------------------
//其中的checkbox的个数代表你操作的个数
//根据你的程序自己修改
//在其他地方,就用CanDo函数,根据操作代号去做检测就可以了
//我的数据库只有一个字段ControlName(integer)--取0或者1
unit UserManageUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB;
type
TUserManageForm = class(TForm)
Bevel3: TBevel;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Label2: TLabel;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
GroupBox2: TGroupBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
GroupBox3: TGroupBox;
CheckBox10: TCheckBox;
CheckBox11: TCheckBox;
CheckBox12: TCheckBox;
GroupBox4: TGroupBox;
CheckBox8: TCheckBox;
CheckBox9: TCheckBox;
GroupBox5: TGroupBox;
CheckBox7: TCheckBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
UserManageForm: TUserManageForm;
implementation
uses LogUnit,SystemSetUnit;
{$R *.dfm}
//
function DeleteAllControl(ADOQuery1:TADOQuery):boolean;far external 'UserManage.dll';
function UpdateUser(ADOQuery1:TADOQuery;C:integer):boolean;far external 'UserManage.dll';
function CanDo(ADOQuery1:TADOQuery;C:integer):boolean;far external 'UserManage.dll'
//
procedure TUserManageForm.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TUserManageForm.Button2Click(Sender: TObject);
//修改权限
begin
if Application.MessageBox('你确定要更改普通用户操作权限吗?','权限设置',MB_YESNO+MB_ICONQUESTION) = IDNO then
begin
Self.OnShow(Sender);
Exit;
end;
DeleteAllControl(Self.ADOQuery1);
if(Self.CheckBox1.Checked = true) then
UpdateUser(Self.ADOQuery1,1);
if(Self.CheckBox2.Checked = true) then
UpdateUser(Self.ADOQuery1,2);
if(Self.CheckBox3.Checked = true) then
UpdateUser(Self.ADOQuery1,3);
if(Self.CheckBox4.Checked = true) then
UpdateUser(Self.ADOQuery1,4);
if(Self.CheckBox5.Checked = true) then
UpdateUser(Self.ADOQuery1,5);
if(Self.CheckBox6.Checked = true) then
UpdateUser(Self.ADOQuery1,6);
if(Self.CheckBox7.Checked = true) then
UpdateUser(Self.ADOQuery1,7);
if(Self.CheckBox8.Checked = true) then
UpdateUser(Self.ADOQuery1,8);
if(Self.CheckBox9.Checked = true) then
UpdateUser(Self.ADOQuery1,9);
if(Self.CheckBox10.Checked = true) then
UpdateUser(Self.ADOQuery1,10);
if(Self.CheckBox11.Checked = true) then
UpdateUser(Self.ADOQuery1,11);
if(Self.CheckBox12.Checked = true) then
UpdateUser(Self.ADOQuery1,12);
Application.MessageBox('系统设置成功,请继续操作','权限设置',MB_OK+MB_ICONINFORMATION);
Close;
end;
procedure TUserManageForm.FormShow(Sender: TObject);
//显示已经设置的权限
begin
Self.CheckBox1.Checked := false;
Self.CheckBox2.Checked := false;
Self.CheckBox3.Checked := false;
Self.CheckBox4.Checked := false;
Self.CheckBox5.Checked := false;
Self.CheckBox6.Checked := false;
Self.CheckBox7.Checked := false;
Self.CheckBox8.Checked := false;
Self.CheckBox9.Checked := false;
Self.CheckBox10.Checked := false;
Self.CheckBox11.Checked := false;
Self.CheckBox12.Checked := false;
if CanDo(Self.ADOQuery1,1) = true then
Self.CheckBox1.Checked := true;
if CanDo(Self.ADOQuery1,2) = true then
Self.CheckBox2.Checked := true;
if CanDo(Self.ADOQuery1,3) = true then
Self.CheckBox3.Checked := true;
if CanDo(Self.ADOQuery1,4) = true then
Self.CheckBox4.Checked := true;
if CanDo(Self.ADOQuery1,5) = true then
Self.CheckBox5.Checked := true;
if CanDo(Self.ADOQuery1,6) = true then
Self.CheckBox6.Checked := true;
if CanDo(Self.ADOQuery1,7) = true then
Self.CheckBox7.Checked := true;
if CanDo(Self.ADOQuery1,8) = true then
Self.CheckBox8.Checked := true;
if CanDo(Self.ADOQuery1,9) = true then
Self.CheckBox9.Checked := true;
if CanDo(Self.ADOQuery1,10) = true then
Self.CheckBox10.Checked := true;
if CanDo(Self.ADOQuery1,11) = true then
Self.CheckBox11.Checked := true;
if CanDo(Self.ADOQuery1,12) = true then
Self.CheckBox12.Checked := true;
end;
end.
#8
我有完整的结构,基于:角色、用户、功能模块树、数据类别树,我们的产品中一直用它。
如果需要,可以发email给我,友情提供给你做参考。
leon2k03@yahoo.com.cn
如果需要,可以发email给我,友情提供给你做参考。
leon2k03@yahoo.com.cn
#9
但是我的模型对于一般的小系统可能比较复杂。
#1
procedure TF_LOGO.BitBtn1Click(Sender: TObject);
begin
data1.ADOQuery1.Close;
data1.ADOQuery1.SQL.Clear;
data1.ADOQuery1.SQL.Add('select * from 用户 where (用户名="'+flatedit1.Text+'") and (密码="'+FlatMaskEdit1.Text+'")');
data1.adoquery1. open;
if data1.adoquery1.recordcount=1 then
begin
if data1.ADOQuery1.FieldValues['权限']=0 then //权限设置
begin
f_index.N4.Visible:=false;
f_index.ToolButton5.Visible:=false;
end;
f_index.StatusBar1.Panels[2].Text:=' '+data1.ADOQuery1.FieldValues['用户名'];
data1.GS.Active:=false;
data1.GS.Active:=true;
f_index.StatusBar1.Panels[5].Text:=' '+data1.GS.FieldValues['商店名']+' 联系电话: '+data1.GS.FieldValues['电话'];
f_logo.Hide;
f_index.Show;
end else
showmessage('用户名或密码,不正确,请重新输入!') ;
flatedit1.Text:='';
FlatMaskEdit1.Text:='';
end;
begin
data1.ADOQuery1.Close;
data1.ADOQuery1.SQL.Clear;
data1.ADOQuery1.SQL.Add('select * from 用户 where (用户名="'+flatedit1.Text+'") and (密码="'+FlatMaskEdit1.Text+'")');
data1.adoquery1. open;
if data1.adoquery1.recordcount=1 then
begin
if data1.ADOQuery1.FieldValues['权限']=0 then //权限设置
begin
f_index.N4.Visible:=false;
f_index.ToolButton5.Visible:=false;
end;
f_index.StatusBar1.Panels[2].Text:=' '+data1.ADOQuery1.FieldValues['用户名'];
data1.GS.Active:=false;
data1.GS.Active:=true;
f_index.StatusBar1.Panels[5].Text:=' '+data1.GS.FieldValues['商店名']+' 联系电话: '+data1.GS.FieldValues['电话'];
f_logo.Hide;
f_index.Show;
end else
showmessage('用户名或密码,不正确,请重新输入!') ;
flatedit1.Text:='';
FlatMaskEdit1.Text:='';
end;
#2
可以用action的tag值做权限
#3
我是用MenuItem.Caption做的
优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
缺点:MenuItem.Caption重复就不准了
优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
缺点:MenuItem.Caption重复就不准了
#4
>>我是用MenuItem.Caption做的
>>优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
>>缺点:MenuItem.Caption重复就不准了
那不如用MenuItem.Name来做,只不过多了一重MenuItem.Name对应MenuItem.Caption的手续罢了
>>优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
>>缺点:MenuItem.Caption重复就不准了
那不如用MenuItem.Name来做,只不过多了一重MenuItem.Name对应MenuItem.Caption的手续罢了
#5
我的一贯做法
-------------------
1,分两种使用者,管理员和一般用户,管理员可以设置普通用户所具有的权限!
2,用户在登陆的时候由程序去判断用户类型,
管理员没有限制
如是普通用户,则在进行数据库的各个表的修改,更新,删除等操作(一般是可以查询的)的时候,去“权限表”判断该操作是否存在,如是,继续,否则,停止该操作!
“权限表”是数据库中一个独立的表,管理者在设置普通用户权限的时候就对这个表进行操作,具有某个权限,就把这个权限的代码输入这个表,否则从该表删除,查询的时候就去看该表中是否存在某操作的代号,决定普通用户执行该操作的可行性
-------------------
1,分两种使用者,管理员和一般用户,管理员可以设置普通用户所具有的权限!
2,用户在登陆的时候由程序去判断用户类型,
管理员没有限制
如是普通用户,则在进行数据库的各个表的修改,更新,删除等操作(一般是可以查询的)的时候,去“权限表”判断该操作是否存在,如是,继续,否则,停止该操作!
“权限表”是数据库中一个独立的表,管理者在设置普通用户权限的时候就对这个表进行操作,具有某个权限,就把这个权限的代码输入这个表,否则从该表删除,查询的时候就去看该表中是否存在某操作的代号,决定普通用户执行该操作的可行性
#6
To Kshape_zh(伟大的大伟//[给我个支点、我就可以翘起整个地球仪!])
兄弟,能否提供一下表结构,相关Code啊,谢谢,分不够再加,说心里话,你让我太感动了
兄弟,能否提供一下表结构,相关Code啊,谢谢,分不够再加,说心里话,你让我太感动了
#7
hihuang(九哥)
下面是我的全部权限控制单元代码了
但是很遗憾,我的DLL找不到了
--------------------------
//其中的checkbox的个数代表你操作的个数
//根据你的程序自己修改
//在其他地方,就用CanDo函数,根据操作代号去做检测就可以了
//我的数据库只有一个字段ControlName(integer)--取0或者1
unit UserManageUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB;
type
TUserManageForm = class(TForm)
Bevel3: TBevel;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Label2: TLabel;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
GroupBox2: TGroupBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
GroupBox3: TGroupBox;
CheckBox10: TCheckBox;
CheckBox11: TCheckBox;
CheckBox12: TCheckBox;
GroupBox4: TGroupBox;
CheckBox8: TCheckBox;
CheckBox9: TCheckBox;
GroupBox5: TGroupBox;
CheckBox7: TCheckBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
UserManageForm: TUserManageForm;
implementation
uses LogUnit,SystemSetUnit;
{$R *.dfm}
//
function DeleteAllControl(ADOQuery1:TADOQuery):boolean;far external 'UserManage.dll';
function UpdateUser(ADOQuery1:TADOQuery;C:integer):boolean;far external 'UserManage.dll';
function CanDo(ADOQuery1:TADOQuery;C:integer):boolean;far external 'UserManage.dll'
//
procedure TUserManageForm.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TUserManageForm.Button2Click(Sender: TObject);
//修改权限
begin
if Application.MessageBox('你确定要更改普通用户操作权限吗?','权限设置',MB_YESNO+MB_ICONQUESTION) = IDNO then
begin
Self.OnShow(Sender);
Exit;
end;
DeleteAllControl(Self.ADOQuery1);
if(Self.CheckBox1.Checked = true) then
UpdateUser(Self.ADOQuery1,1);
if(Self.CheckBox2.Checked = true) then
UpdateUser(Self.ADOQuery1,2);
if(Self.CheckBox3.Checked = true) then
UpdateUser(Self.ADOQuery1,3);
if(Self.CheckBox4.Checked = true) then
UpdateUser(Self.ADOQuery1,4);
if(Self.CheckBox5.Checked = true) then
UpdateUser(Self.ADOQuery1,5);
if(Self.CheckBox6.Checked = true) then
UpdateUser(Self.ADOQuery1,6);
if(Self.CheckBox7.Checked = true) then
UpdateUser(Self.ADOQuery1,7);
if(Self.CheckBox8.Checked = true) then
UpdateUser(Self.ADOQuery1,8);
if(Self.CheckBox9.Checked = true) then
UpdateUser(Self.ADOQuery1,9);
if(Self.CheckBox10.Checked = true) then
UpdateUser(Self.ADOQuery1,10);
if(Self.CheckBox11.Checked = true) then
UpdateUser(Self.ADOQuery1,11);
if(Self.CheckBox12.Checked = true) then
UpdateUser(Self.ADOQuery1,12);
Application.MessageBox('系统设置成功,请继续操作','权限设置',MB_OK+MB_ICONINFORMATION);
Close;
end;
procedure TUserManageForm.FormShow(Sender: TObject);
//显示已经设置的权限
begin
Self.CheckBox1.Checked := false;
Self.CheckBox2.Checked := false;
Self.CheckBox3.Checked := false;
Self.CheckBox4.Checked := false;
Self.CheckBox5.Checked := false;
Self.CheckBox6.Checked := false;
Self.CheckBox7.Checked := false;
Self.CheckBox8.Checked := false;
Self.CheckBox9.Checked := false;
Self.CheckBox10.Checked := false;
Self.CheckBox11.Checked := false;
Self.CheckBox12.Checked := false;
if CanDo(Self.ADOQuery1,1) = true then
Self.CheckBox1.Checked := true;
if CanDo(Self.ADOQuery1,2) = true then
Self.CheckBox2.Checked := true;
if CanDo(Self.ADOQuery1,3) = true then
Self.CheckBox3.Checked := true;
if CanDo(Self.ADOQuery1,4) = true then
Self.CheckBox4.Checked := true;
if CanDo(Self.ADOQuery1,5) = true then
Self.CheckBox5.Checked := true;
if CanDo(Self.ADOQuery1,6) = true then
Self.CheckBox6.Checked := true;
if CanDo(Self.ADOQuery1,7) = true then
Self.CheckBox7.Checked := true;
if CanDo(Self.ADOQuery1,8) = true then
Self.CheckBox8.Checked := true;
if CanDo(Self.ADOQuery1,9) = true then
Self.CheckBox9.Checked := true;
if CanDo(Self.ADOQuery1,10) = true then
Self.CheckBox10.Checked := true;
if CanDo(Self.ADOQuery1,11) = true then
Self.CheckBox11.Checked := true;
if CanDo(Self.ADOQuery1,12) = true then
Self.CheckBox12.Checked := true;
end;
end.
下面是我的全部权限控制单元代码了
但是很遗憾,我的DLL找不到了
--------------------------
//其中的checkbox的个数代表你操作的个数
//根据你的程序自己修改
//在其他地方,就用CanDo函数,根据操作代号去做检测就可以了
//我的数据库只有一个字段ControlName(integer)--取0或者1
unit UserManageUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB;
type
TUserManageForm = class(TForm)
Bevel3: TBevel;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Label2: TLabel;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
GroupBox2: TGroupBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
GroupBox3: TGroupBox;
CheckBox10: TCheckBox;
CheckBox11: TCheckBox;
CheckBox12: TCheckBox;
GroupBox4: TGroupBox;
CheckBox8: TCheckBox;
CheckBox9: TCheckBox;
GroupBox5: TGroupBox;
CheckBox7: TCheckBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
UserManageForm: TUserManageForm;
implementation
uses LogUnit,SystemSetUnit;
{$R *.dfm}
//
function DeleteAllControl(ADOQuery1:TADOQuery):boolean;far external 'UserManage.dll';
function UpdateUser(ADOQuery1:TADOQuery;C:integer):boolean;far external 'UserManage.dll';
function CanDo(ADOQuery1:TADOQuery;C:integer):boolean;far external 'UserManage.dll'
//
procedure TUserManageForm.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TUserManageForm.Button2Click(Sender: TObject);
//修改权限
begin
if Application.MessageBox('你确定要更改普通用户操作权限吗?','权限设置',MB_YESNO+MB_ICONQUESTION) = IDNO then
begin
Self.OnShow(Sender);
Exit;
end;
DeleteAllControl(Self.ADOQuery1);
if(Self.CheckBox1.Checked = true) then
UpdateUser(Self.ADOQuery1,1);
if(Self.CheckBox2.Checked = true) then
UpdateUser(Self.ADOQuery1,2);
if(Self.CheckBox3.Checked = true) then
UpdateUser(Self.ADOQuery1,3);
if(Self.CheckBox4.Checked = true) then
UpdateUser(Self.ADOQuery1,4);
if(Self.CheckBox5.Checked = true) then
UpdateUser(Self.ADOQuery1,5);
if(Self.CheckBox6.Checked = true) then
UpdateUser(Self.ADOQuery1,6);
if(Self.CheckBox7.Checked = true) then
UpdateUser(Self.ADOQuery1,7);
if(Self.CheckBox8.Checked = true) then
UpdateUser(Self.ADOQuery1,8);
if(Self.CheckBox9.Checked = true) then
UpdateUser(Self.ADOQuery1,9);
if(Self.CheckBox10.Checked = true) then
UpdateUser(Self.ADOQuery1,10);
if(Self.CheckBox11.Checked = true) then
UpdateUser(Self.ADOQuery1,11);
if(Self.CheckBox12.Checked = true) then
UpdateUser(Self.ADOQuery1,12);
Application.MessageBox('系统设置成功,请继续操作','权限设置',MB_OK+MB_ICONINFORMATION);
Close;
end;
procedure TUserManageForm.FormShow(Sender: TObject);
//显示已经设置的权限
begin
Self.CheckBox1.Checked := false;
Self.CheckBox2.Checked := false;
Self.CheckBox3.Checked := false;
Self.CheckBox4.Checked := false;
Self.CheckBox5.Checked := false;
Self.CheckBox6.Checked := false;
Self.CheckBox7.Checked := false;
Self.CheckBox8.Checked := false;
Self.CheckBox9.Checked := false;
Self.CheckBox10.Checked := false;
Self.CheckBox11.Checked := false;
Self.CheckBox12.Checked := false;
if CanDo(Self.ADOQuery1,1) = true then
Self.CheckBox1.Checked := true;
if CanDo(Self.ADOQuery1,2) = true then
Self.CheckBox2.Checked := true;
if CanDo(Self.ADOQuery1,3) = true then
Self.CheckBox3.Checked := true;
if CanDo(Self.ADOQuery1,4) = true then
Self.CheckBox4.Checked := true;
if CanDo(Self.ADOQuery1,5) = true then
Self.CheckBox5.Checked := true;
if CanDo(Self.ADOQuery1,6) = true then
Self.CheckBox6.Checked := true;
if CanDo(Self.ADOQuery1,7) = true then
Self.CheckBox7.Checked := true;
if CanDo(Self.ADOQuery1,8) = true then
Self.CheckBox8.Checked := true;
if CanDo(Self.ADOQuery1,9) = true then
Self.CheckBox9.Checked := true;
if CanDo(Self.ADOQuery1,10) = true then
Self.CheckBox10.Checked := true;
if CanDo(Self.ADOQuery1,11) = true then
Self.CheckBox11.Checked := true;
if CanDo(Self.ADOQuery1,12) = true then
Self.CheckBox12.Checked := true;
end;
end.
#8
我有完整的结构,基于:角色、用户、功能模块树、数据类别树,我们的产品中一直用它。
如果需要,可以发email给我,友情提供给你做参考。
leon2k03@yahoo.com.cn
如果需要,可以发email给我,友情提供给你做参考。
leon2k03@yahoo.com.cn
#9
但是我的模型对于一般的小系统可能比较复杂。