权限控制(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,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...
随机推荐
- AtCoder Beginner Contest 132 F Small Products
Small Products 思路: 整除分块+dp 打表发现,按整除分块后转移方向如下图所示,上面的块的前缀转移到下面的块 代码: #pragma GCC optimize(2) #pragma G ...
- Python3+Appium学习笔记02-环境配置(下)
配置所需软件及我当前使用的版本: 1)java jdk 1.8.0 2)android sdk 24.4.1 3)Python3 3.7.3 4)Appium-Python-Client 5)n ...
- Java&Selenium&JS&AWT之那些难以点击到的按钮
一.摘要 本篇博文的重点并不是简单的click()方法,而是要讲的是那些click()方法失效的时候的处理方式,其实做自动化久了我们都能发现研发的代码并不是都那么美丽,selenium支持的8种定位方 ...
- Aizu - 1382 Black or White (分段决策,单调队列优化dp)
题意:给定只有黑白两种颜色的序列A,B,每次可以选择一段连续的长度不超过k的区间将其染成同一种颜色,求把序列A变成B所需的最小操作次数. 首先需要找出一些最优解的特征: 1.如果序列A的第一个颜色和B ...
- TBDR下msaa 在metal vulkan和ogles的解决方案
https://developer.arm.com/solutions/graphics/developer-guides/understanding-render-passes/multi-samp ...
- BZOJ 2759 一个动态树好题 (LCT)
PoPoQQQ 再一次orz-没看得特别明白的可以回来看看蒟蒻的补充口胡 我这里提一下关于splaysplaysplay维护的子树信息- 在原树上考虑,对于每一个点iii都有这样一个信息xi=ki∗x ...
- 调用jquery.Jcrop.min.js 切割图片 实例
需求是:上传一个图片,然后将上传的这个图片进行切割........ 首先是jsp页面.页面需要引入js <script src="${fileUrlPrx}/scripts/wap/ ...
- 【Android-自定义控件】 漂亮的Toast
修改Toast属性,美化Toast //创建一个Toast Toast toast=new Toast(getApplicationContext()); //创建Toast中的文字 TextView ...
- pypdf2:下载Americanlife网页生成pdf合并pdf并添加书签
初步熟悉 安装 pip install pypdf2 合并并添加书签 #!/usr/bin/env python3.5 # -*- coding: utf-8 -*- # @Time : 2019/1 ...
- BZOJ 2982 combination 脑子+组合数学
可以发现,整个数列构成一个树形结构,并且是个完全二叉堆(小根堆). 并且这个堆的形态在给定$n$后是固定的,第1个位置上显然只能放1. 对子树的根来说,他自己是所分得的数集中最小的那个,所以从剩下$s ...