关于权限,大家都可以进来说N句,谢谢各位

时间:2021-09-01 15:28:32

     小弟,真诚的希望大家能帮一帮我,权限设计源码,这是俺最后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;

#2


可以用action的tag值做权限

#3


我是用MenuItem.Caption做的
优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
缺点:MenuItem.Caption重复就不准了

#4


>>我是用MenuItem.Caption做的
>>优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
>>缺点:MenuItem.Caption重复就不准了
那不如用MenuItem.Name来做,只不过多了一重MenuItem.Name对应MenuItem.Caption的手续罢了

#5


我的一贯做法
-------------------
1,分两种使用者,管理员和一般用户,管理员可以设置普通用户所具有的权限!
2,用户在登陆的时候由程序去判断用户类型,
管理员没有限制
如是普通用户,则在进行数据库的各个表的修改,更新,删除等操作(一般是可以查询的)的时候,去“权限表”判断该操作是否存在,如是,继续,否则,停止该操作!

“权限表”是数据库中一个独立的表,管理者在设置普通用户权限的时候就对这个表进行操作,具有某个权限,就把这个权限的代码输入这个表,否则从该表删除,查询的时候就去看该表中是否存在某操作的代号,决定普通用户执行该操作的可行性

#6


To Kshape_zh(伟大的大伟//[给我个支点、我就可以翘起整个地球仪!])

      兄弟,能否提供一下表结构,相关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.

#8


我有完整的结构,基于:角色、用户、功能模块树、数据类别树,我们的产品中一直用它。
如果需要,可以发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;

#2


可以用action的tag值做权限

#3


我是用MenuItem.Caption做的
优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
缺点:MenuItem.Caption重复就不准了

#4


>>我是用MenuItem.Caption做的
>>优点:代码容易写,循环遍历就可以搞定;程序修改的时候只需重新生成权限库,不需要修改程序和tag
>>缺点:MenuItem.Caption重复就不准了
那不如用MenuItem.Name来做,只不过多了一重MenuItem.Name对应MenuItem.Caption的手续罢了

#5


我的一贯做法
-------------------
1,分两种使用者,管理员和一般用户,管理员可以设置普通用户所具有的权限!
2,用户在登陆的时候由程序去判断用户类型,
管理员没有限制
如是普通用户,则在进行数据库的各个表的修改,更新,删除等操作(一般是可以查询的)的时候,去“权限表”判断该操作是否存在,如是,继续,否则,停止该操作!

“权限表”是数据库中一个独立的表,管理者在设置普通用户权限的时候就对这个表进行操作,具有某个权限,就把这个权限的代码输入这个表,否则从该表删除,查询的时候就去看该表中是否存在某操作的代号,决定普通用户执行该操作的可行性

#6


To Kshape_zh(伟大的大伟//[给我个支点、我就可以翘起整个地球仪!])

      兄弟,能否提供一下表结构,相关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.

#8


我有完整的结构,基于:角色、用户、功能模块树、数据类别树,我们的产品中一直用它。
如果需要,可以发email给我,友情提供给你做参考。
leon2k03@yahoo.com.cn

#9


但是我的模型对于一般的小系统可能比较复杂。