能详细介绍一下权限控制的例子吗?包括用户授权界面,要求漂亮!别叫我去看以前的帖子(200分)

  • 主题发起人 主题发起人 fishor
  • 开始时间 开始时间
学习,权限控制还是比较复杂的,如果有 ACCESS 的例子,我要一个
TXYQBF_gXX@163.COM,我出 100 分,发给我之后 请留言要分。
 
请将用TAG属性控制权限的办法做一个阐述。谢谢
 
Me too
kycheung@yeah.net
 
给我也来一份,
相互学习!相互学习!
 
我的信箱是520zhuhaibo@163.com
谢谢了!!!!
 
也给我一份呀!
油箱:ytjlt@sohu.com
 
白痴啊,2001年的貼子,現在還會有東西給,咋不結貼呢
 
1、软件开发环境:Delphi 6.0+Win2000+SQL Server 2000
2、特点:由大家点评,本人自认为用户管理做得最好,模拟Win 2000,
自己控制用户、用户组,用户权限,非常方便。

本人E-Mail:chnplzh@163.com

我有铝加工软件效果图,放在源码空间(www.playicq.com)的开发工具栏,
有兴趣的朋友可以到那里下载。本人E-Mail:chnplzh@163.com
 
急!!!

帮帮忙。 我现在被指定来做这个模块,

我的email: cocainy@eyou.com

谢谢!
 
我也要 talltree@medsay.com
 
lishding兄也请给我发一份,非常感谢
haiy1@163.com
不胜感激~~[:D]
 
转贴:
好的话就给分~~~
如何为应用软件加入全面的功能权限控制

关键词:Delphi - MIS

如何为应用软件加入全面的功能权限控制

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

最近,笔者利用Delphi平台作应用开发时,通过Delphi4提供的VCL控件解决了这一问题。在了解如何实现功能权限控制之前,得先看一下Delphi4提供的新控件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,其实,在Delphi4中,象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;

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).Caption]) then

TAction(ActionList1.Actions).Enabled:=cdsRight.FieldByName('ActionEnable').AsBoolean;

end;

finally

cdsRight.Close;

cdsRight.Free;

end;

end;

这段代码中,假设当前的用户ID为yh,同时只设定了功能的Enable属性。

最后,笔者为了演示功能权限的设定功能,制作了demo程序,感兴趣者可以向作者索取。在demo程序中,同时还使用了内存表ClientDataSet的使用方法,不用BDE建立瘦数据库应用程序。



通讯地址:吉林四平宏宝莱饮品有限公司微机管理中心

     于洪

Email地址:yhnew@163.net


--------------------------------------------------------------------------------

欢迎阅读China ASP的专栏文章,需要转载请与我们联系

Copyright ? 上海聚声计算机系统工程有限责任公司 1999-2000, All Rights Reserved


 delphi其他
利用Dll实现通用密码验证框

 
---- 在我们编制Delphi应用程序,常常需要提供一个密码验证框,对应用程序的使用者进行身份核对。如果能有一个通用的密码验证框,便能够为我们的工作节约不少的时间,更能使我们编制的程序小而快。以下的程序为你提供了这样的一个DLL文件。

//文件名为CheckPasswordForm.dpr;
编译此文件生成CheckPasswordForm.dll
library CheckPasswordForm;

uses
XcqCheck in 'XcqCheck.pas' {XcqForm};

exports
CheckPassword name 'CheckPassword';//dll入口

begin
end.


//文件名为XcqCheck.pas
unit XcqCheck;

interface

uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, Menus;

type
TXcqForm = class(TForm)
XcqEdit: TMaskEdit;//密码输入框
OkBtn: TButton;
procedure OkBtnClick(Sender: TObject);
end;

var
XcqForm: TXcqForm;
Check: Boolean;//验证输入密码的正确性
function CheckPassword: Boolean;export;
//本dll文件的关键实现

implementation

{$R *.DFM}

procedure TXcqForm.OkBtnClick(Sender: TObject);
begin
if XcqEdit.Text = 'xcq' then
Check := True;
Close;
end;

function CheckPassword;export;
begin
Check := False;
XcqForm := TXcqForm.Create(Application);
//创建密码输入框
XcqForm.ShowModal;//显示密码输入框;
注意:不能用XcqForm.Show!
Result := Check;//返回给调用本dll的应用程序判断
XcqForm.Free;//释放本dll文件所占资源
end;
end.

---- 在调用以上dll中CheckPassword函数的应用程序中只需加入以下语句在implementation 后,function CheckPassword: Boolean; external 'CheckPasswordForm.dll' name 'CheckPassword';在需要进行密码验证的地方加入下面的条件语句就完全实现了密码验证的功能。
if CheckPassword then
begin
...//如XcqQuery.Open;
end;

---- 上面的程序只是一个简单的密码验证框,我们可以将密码以写入注册表或文件的方式保存,动态修改,更可以利用算术算法对密码进行简单的加密等,使要保密的数据更安全。
---- 其实,上文中如何在dll中实现窗口让我走了不少弯路,我觉得此法对大家更有意义,这是避免程序庞大的一种有效方法,不妨试试。

---- 以上程序在Windows98/Delphi3下编译通过。欢迎大家批评指正。


加入时间:2000-6-12
阅读次数:87
 
to lishding:
兄弟给我发一份,谢谢:)
eeeirve@163.com
 
samboy111@sohu.com
给我发一份,谢谢
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部