急需登陆权限的例子,各位富翁帮帮忙,提拨晚辈。(100分)

  • 主题发起人 主题发起人 ttaa
  • 开始时间 开始时间
T

ttaa

Unregistered / Unconfirmed
GUEST, unregistred user!
很多富翁都说在数据库里建俩三个表,用户表,权限表。接着用actionlist来对应菜单项。
我查过很多贴子了,下载了论坛的离线数据库看了几天了。意思大概了解,但还不会做。
哪位富翁手上有源码范例的话,mail我一个吧,最好用delphi 6+ access的。
不要任何第三方控件。要简单明了的,好让我看的懂嘛。
我的email: abenz@163.net
谢谢各位啦。孝顺100分。我很辛苦赚的。
 
你可以找一个这样的控件,也可以自已写一个呀,我就是这么干的
 
不想用第三方控件。
自己呢,还没有到能写控件的地步啦。
我能够写的话,就不用我那可怜的身家来换范例啦。
 
1.从权限表读取用户的操作权限。
2.主界面激活时,

{ 权限设置 }
for nLoop:=0 to ActionList.ActionCount-1 do begin
if ActionList.Actions[nLoop] is TAction then begin
oAction:= (ActionList.Actions[nLoop] as TAction);
sWrkStr:= trim(oAction.HelpKeyword);
if (sWrkStr<>'') and (sys_CheckPerms=true) then
oAction.Enabled:=sql_CheckQuanXian(sWrkStr)
else
oAction.Enabled:=true;
end;
end;
注释:1、每项功能的功能编码填写在对应Action的HelpKeyWord属性。
2、如果HelpKeyWord为空串,则没有权限要求。
3、全局变量sys_CheckPerms控制是否进行权限检查
4、sql_CheckQuanXian()完成权限检查。如果权限表中登记有功能编码项,就有权。
 
谢谢楼上的,虽然我还看的不是很懂。
这问题将会放一天,因为国庆节上不了网。哎....
今晚就把它结束了,各位多给意见啊。
 
考虑的思路应该是使用数据库,然后通过动态设置菜单项或按钮的属性的方式来达成.
 
to michael.fly:
有没有例子给我参考参考?
 
to wenhong: 文红?你的名字?有点亲切,我哥名字有个文,我名字有个洪。呵呵。[^]
各位大虾:我刚从www.playicq.com下载了个动态菜单的例子。
那位大虾叫什么名字还来不及看呢。例子我也还没有好好的看。
但大概是我所需的。呵呵。
各位还有没有啊?所谓人心不足啊。多多益善,多些资料总是好的。
可以让自己的功力提升快些嘛。
重申我的的email : abenz@163.net 。
看我的email就知道我比较本,--啊笨仔--[:)]各位多多指教。
 
竟然没人回答我?哎。我的100分.......
 
我做的这个程序是用禁止菜单的方式实现对模块的控制(三层),可以参考
procedure TFirstForm.Edit2Exit(Sender: TObject);
var
sPASSWD, vCompNa, vCompIP, vUSERNAME,
vUseSystem, vLoginTime: string;
begin
Caption := '正在验证用户和密码...';
// Prepare := IPre_AppServer.CreateInstance(InstanceName);
if (Trim(Edit2.Text) <> '') and (Trim(Edit1.Text) <> '') then begin
vSYSNO := 'SYS41';
vUSERNO := UpperCase(TRIM(Edit1.Text));
if Trim(vUSERNO) <> '' then begin
MainForm.SmsCDS.Close;
MainForm.SmsCDS.Params[0].AsString := vSYSNO;
MainForm.SmsCDS.Params[1].AsString := vUSERNO;
MainForm.SmsCDS.Open;
if MainForm.SmsCDS.RecordCount > 0 then begin
sPasswd := MainForm.SmsCds.FieldByName('PASSWORD').AsString;
MainForm.SmsCDS.Close;
//ShowMessage(PW2BIN(sPASSWD,TRUE));
if UPPERCASE(Edit2.Text) = PW2BIN(sPASSWD, TRUE) then
vINFO := 'OK'
else
vINFO := 'ERROR';
end
else
vINFO := 'ERROR';
end
else
vINFO := 'NOT FOUND';

if vINFO = 'NOT FOUND' then
ShowMessage('用户找不到')
else if vINFO = 'ERROR' then
ShowMessage('口令错误!')
else if vINFO = 'OK' then begin
Edit2.Text := '';
vCOMPNA := ComputerName;
vCOMPIP := ComputerIP;
mainform.Socket_C.AppServer.Login(vUserno, vCompNa, vCompIP, 'SYS41', TimeToStr(TIME));
EnableMenu;
FirstForm.WindowState := wsMinimized;
mainform.StatusBar.Panels[0].Text := UserStr + UPPERCASE(Edit1.Text);
end
else
ShowMessage('不能辨别的错误!');
end;
Caption := '登入窗口';
end;
 
是实上在应用层面做登录和权限很有问题,那就是用户可以多次登录。如果别人知道超级用
户名和密码就完了:(
因此在应用层面上不管用什么方法都无法做得完美,只有在系统数据库层面上做才能perfect!
 
根据不同的用户权限,在用户登陆时,显示不同的菜单,
for i:=0 to f_main.N1.count-1 do
begin
if OperRight[i+1]='1' then
f_main.N1.items.visible:=true
else f_main.N1.items.visible:=false;
end;
 
给你个文档
发了,请查收
 
事实上这个问题可以不局限在数据库类型层面上而作为一种探讨,有兴趣的可以新开一个贴
子讨论一下。
 

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
后退
顶部