权限控制(delphi TActionList方案) 笔者利用Delphi平台作应用开发时,通过Delphi7提供的VCL控件解决了这一问题。 procedure TfrmMain.SetUserExecute(Sender: TObject); begin frmUser.showModal; end; 当要限定这一功能时,可能利用TAction的Enabled,将其设为False,此功能对于用户将被屏蔽掉, 当成功能的建立了TActionList后,可能有人问,如果使用其中的Action, 在理解了Delphi中的TActionList及TAction之后,就可以看看功能权限的具体实现方法。 第一步,建立两张表,一张表存储用户信息,另一张表存储权限定义。 用户信息表User结构如下: UserRight表结构如下: UserID(String,用户的ID号,为表关键字)
procedure TfrmUser.N1Click(Sender: TObject); var i:Integer; Action:TAction; begin //Add Action into user right cds. with frmMain do begin for i:=0 to ActionList1.actioncount-1 do begin Action:=ActionList1.Actions[i]; cdsUserRight.AppendRecord([cdsUser.FieldByName(’userName’).AsString,TAction(Action).Caption,TAction(Action).Enabled,i]); end; end; end; 在这段代码中,用到了TActionList的两个属性,一个是ActionCount,另一个是Actions。 第三步,可以用Grid对上一步产生的表进行编辑操作 第四步,利用第二、三步产生的功能限制表UserRight,限制用户的权限, procedure TfrmMain.FormCreate(Sender: TObject); const testUser=’yh’; var cdsRight:TClientDataSet; i:Integer; begin //set right of function cdsRight:=TClientDataSet.Create(self); try cdsRight.LoadFromFile(’Right.CDS’); cdsRight.AddIndex(’id’,’UserName;ActionCaption’,[],’’,’’,0); cdsRight.IndexName:=’id’; for i:=0 to ActionList1.ActionCount-1 do begin if cdsRight.FindKey([TestUser,TAction(ActionList1.Actions[i]).Caption]) then TAction(ActionList1.Actions[i]).Enabled:=cdsRight.FieldByName(’ActionEnable’).AsBoolean; end; finally cdsRight.Close; cdsRight.Free; end; end; 这段代码中,假设当前的用户ID为yh,同时只设定了功能的Enable属性 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论