权限控制(delphi actionlist)

权限控制(delphi TActionList方案)
在软件开发中,为软件加入权限控制功能,使不一样的用户有不一样的使用权限,是很是重要的一项功能,
由其在开发数据库方面的应用,这项功能更为重要。
可是,要为一个应用加入全面的权限控制功能,又怎样实现呢?
你们知道,如今的应用,通常均以菜单访问功能的形式出现,按照常规的作法,
只要让注册进入应用的不一样用户,能够访问不一样的功能菜单,从而实现功能权限的控制,
可是,有这样一个问题,此种方法便无能为力,如今的应用软件,为了提升软件的易操做性,
同一功能可能有多种不一样的访问方式,如工具条,右键菜单等;
一样,同一个功能,也可能在软件的不一样地方被调用,而不单单被限制为用程序的主菜单来调用,
这样,才能保证应用的易用性。
写到这,问题已经很是清楚,对于要限制的软件功能,仅经过一次代码设计,
不管在整个应用的任何地方或经过何种形式调用此功能,都能被功能权限所限制。数据库

笔者利用Delphi平台做应用开发时,经过Delphi7提供的VCL控件解决了这一问题。
在了解如何实现功能权限控制以前,得先看一下Delphi7提供的新控件TActionList,
经过TActionList,应用程序能够统一管理其TAction,这里的Action,能够理解为应用程序的功能。
在应用的设计期间,能够经过TActionList编辑器将功能(Action)加入TActionList,
将Action加入TActionList后,就可能经过Object Inspector设置Action的属性或为其创建事件句柄。
在这里,咱们能够用Action的OnExecute事件句柄实现具体的功能,以下代码来显示一个操做窗体:数组

procedure TfrmMain.SetUserExecute(Sender: TObject);编辑器

begin工具

   frmUser.showModal;.net

end;设计

  当要限定这一功能时,可能利用TAction的Enabled,将其设为False,此功能对于用户将被屏蔽掉,
若是要此功能对用户不可见,则能够设定Visible为False。orm

  当成功能的创建了TActionList后,可能有人问,若是使用其中的Action,
在Delphi7中,象TButton、TMenuItem、TSpeedButton、TRadioButton等控件,均有一个属性Action,
正是经过它,咱们能够将Menu或Button链接到TActionList中TAction,从而实现功能按钮或菜单的功能。blog

在理解了Delphi中的TActionList及TAction以后,就能够看看功能权限的具体实现方法。索引

第一步,创建两张表,一张表存储用户信息,另外一张表存储权限定义。事件

用户信息表User结构以下:
UserID(String/用户的ID号,为表关键字)
UserName(String用户名称)
UserPassWord(String,用户口令)

UserRight表结构以下:

UserID(String,用户的ID号,为表关键字)
ActionCaption(String,存储功能的名称,即Action的Caption属性值)
ActionEnable(Boolean,存储功能是否能够访问,即Action的Enable 属性值)
ActionVisible(Boolean,存储功能是否可见,即Action的visible属性值)


第二步,增长用户时填加用户功能权限
当向User表中增长用户时,须要向UserRight中增长功能设置记录,先看看下面的实现代码:

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。
ActionCount表示TactionList中有多少功能,
即Action,Actions是一个数组属性,
经过索引可能访问每个TAction,从而能够设置其具体的属性,象上面提到的Enable及Visible,
从而达到限制的目的,经过这段代码,将应用程序的全部功能都加入了UserRight表中。

第三步,能够用Grid对上一步产生的表进行编辑操做

第四步,利用第2、三步产生的功能限制表UserRight,限制用户的权限,
这能够在应用程序的主窗体的OnCreate 中实现。

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属性--------------------- 版权声明:本文为CSDN博主「姚军权」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处连接及本声明。原文连接:https://blog.csdn.net/chinayaosir/article/details/4707217

相关文章
相关标签/搜索