权限控制(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;
end;
当要限定这一功能时,可能利用TAction的Enabled,将其设为False,此功能对于用户将被屏蔽掉,
如果要此功能对用户不可见,则可以设定Visible为False。
当成功能的建立了TActionList后,可能有人问,如果使用其中的Action,
在Delphi7中,象TButton、TMenuItem、TSpeedButton、TRadioButton等控件,均有一个属性Action,
正是通过它,我们可以将Menu或Button连接到TActionList中TAction,从而实现功能按钮或菜单的功能。
在理解了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对上一步产生的表进行编辑操作
第四步,利用第二、三步产生的功能限制表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
权限控制(delphi actionlist)的更多相关文章
- delphi 权限控制(delphi TActionList方案)
在软件开发中,为软件加入权限控制功能,使不同的用户有不同的使用权限,是非常重要的一项功能,由其在开发数据库方面的应用,这项功能更为重要.但是,要为一个应用加入全面的权限控制功能,又怎样实现呢?大家知道 ...
- YII2中使用RBAC对模块,控制器,方法的权限控制以及规则的使用
在使用YII2中自带的RBAC时,需要先配置config/web.php: return [ // ... 'components' => [ 'authManager' => [ 'cl ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- MongoDB 安全和访问权限控制
MongoDB的访问控制能够有效保证数据库的安全,访问控制是指绑定Application监听的IP地址,设置监听端口,使用账户和密码登录 一,访问控制的参数 1,绑定IP地址 mongod 参数:-- ...
- WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...
- ASP.NET MVC实现权限控制
这篇分享一下 ASP.NET MVC权限控制.也就是说某一用户登录之后,某一个用户是否有权限访问Controller,Action(操作),视图等 想实现这些功能,需要在数据库创建好几个表:[User ...
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
项目结构: 1.maven项目的pom中引入shiro所需的jar包依赖关系 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- Appfuse:权限控制
Appfuse的权限控制依赖于Struts的Menu机制,common下的menu.jsp是对菜单顺序的定义,详细的菜单项和菜单链接及权限再menu-config.xml中控制,如下: <Men ...
- .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩过webAPI,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...
随机推荐
- JS继承的原理、方式和应用
概要: 一.继承的原理 二.继承的几种方式 三.继承的应用场景 什么是继承? 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展.继承的过程,就是从一般到特殊的过程.要了解JS继承必须首先要了解 ...
- TCP 的三次握手和四次挥手,TCP 的流量控制和拥塞控制
70.TCP协议的三次握手与四次挥手70.1.TCP报文结构 1.源端口号:表示发送端端口号,字段长为16位. 2.目标端口号:表示接收端口号,字段长为16位. 3.序列号:表示发送数据的位置 ...
- Python正则及geometer正则截图讲解
正则表达式 语法: 1 2 3 4 5 6 import re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹 ...
- shell爬取斗图网
#!/bin/bash read -p "请输入要爬取的页面数(默认为10):" page_num page_num=${page_num:-} echo $page_num re ...
- 微信小程序填坑之旅(2)-wx.showLoading的时候,仍能点击穿透,造成重复点击button的问题
解决办法:mask =true wx.showLoading({ title: '正在上传...', mask:true, })
- LA 7043 International Collegiate Routing Contest 路由表 字典树离散化+bitset 银牌题
题目链接:给你n(n<=3e4)个路由地址(注意有子网掩码现象), 路由地址:128.0.0.0/1的形式 要求你输出一个路由集合,其是给定的路由集合的补集,且个数越少越好 #include & ...
- ubuntu安装chrome driver
首先下载Chrome Driver(Firefox Driver的安装与该步骤相同) 链接: http://chromedriver.storage.googleapis.com/index.html ...
- Eclipse一直building workspace问题解决
今天新导入了一个maven项目,但是总是一直building workspace 解决方案: 去掉图中Maven Project Builder勾选
- 关于bert+lstm+crf实体识别训练数据的构建
一.在实体识别中,bert+lstm+crf也是近来常用的方法.这里的bert可以充当固定的embedding层,也可以用来和其它模型一起训练fine-tune.大家知道输入到bert中的数据需要一定 ...
- 下载 OllyDbg
http://www.ollydbg.de/