⑷ “查询与统计”菜单中的各个子菜单项的OnClick事件采用了事件共享技术,共用NSearchClick事件,通过菜单项对象的Tag属性值加以识别。“查询功能”菜单项OnClick事件的代码如下:
procedure TFormMain.NSearchClick(Sender: TObject);
begin // 查询功能
With FormSearchAchievement do begin
BtnSearch.Tag := (Sender As TMenuItem).Tag; // 传递查询类别
case BtnSearch.Tag of
0 : SBtnStatistics.Caption:='统计报表';
2..3 : SBtnStatistics.Caption:=(Sender As TMenuItem).Caption;
end;
ShowModal;
end;
end;
⑸ 最后编写主界面的OnClose事件,系统退出时关闭打开的数据集,代码如下:
procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
with DMServerDB do begin
ADODataSetUserRole.Close;
ADODataSetRole.Close;
ADODataSetRoleRight.Close;
end;
end;
相关用户登录后,系统将按管理员分配给他的用户权限设置菜单项的可用性,如图9所示。

图9 用户登录后的主界面
4 总结
系统的使用权限涉及到系统数据的安全,因此是数据库应用系统必须要考虑的问题,文中给出了一个对象使用权限自动添加和设置的通用过程和函数,并提供一个用户权限分配界面,用于完成登录用户使用权限的分配与管理。由于篇幅有限,本文仅给出了菜单项对象的使用权限分配,但已预留了接口,读者可以参考AddRoleRight和SetObjRight过程,设置其他对象的使用权限,为适合每个界面中对象使用权限的分配和使用,可以在RoleRight角色权限表中增加一个字段FormClass,用于表示该对象所在的窗体类,如此就可以对应用程序中所有窗体类中定义的所有菜单、按钮进行使用权限的分配和管理。
|