在应用软件中,通常将软件的功能分为若干个子程序,通过主程序调用。那么,通过众多客户来 说明,如果设置各人的权限呢?
一、模板的权限
.主程序Main.EXE,通过菜单调用几十个子程序。如:
1、主程序Main.EXE,通过菜单调用打开子程序,即模块程序:
2、调用子程序
3、主程序调用的权限设置
通过(用户)登录名和密码,读取相关模块的权限,进入模块(子程序)。
二、模块、子程序的管理权限
1、模块的菜单
每个模块通过三级菜单,管理40个左右窗口。那么,对于用户的权限有三个:
(1)浏览的权限,可进入观看数据;
(2)编辑的权限,可对数据进行修改、增加、删除操作;
(3)打印和导出EXCEL、PDF等文件操作;
通常,我们将2、3权限合并。这样,对于每个窗口,用户就是二个权限:一是进入浏览权限,二是编辑打印的权限。
2、设置模块、菜单、窗口的数据关系
这里,要建立数据表,将模块、菜单、窗口和指定的二个权限,进行关联。见 上图。
3、 在模块程序中,设置“本模块”的管理权限
一人一条,对应设置权限。
4、建立读取管理权限的函数
function GetPermissions_QX(s1,s2:string):Boolean; // 获取是否设置权限
// S1 模块名 S2 菜单2名称 数据空 返回否
var SQL:string;
begin
Result := True;
SQL:='select 权限 From 系统_模块窗口配置 '+
'where (模块='+#39+S1+#39+') and (菜单2='+#39+S2+#39+') and (分支='+#39+sFCID+#39+')';
// showmessage(SQL);
try
DataModule1.ClientDataSet101.Active:=False;
DataModule1.ClientDataSet101.DataRequest(SQL);
DataModule1.ClientDataSet101.Active:=True;
if DataModule1.ClientDataSet101.RecordCount>0
then Result:=DataModule1.ClientDataSet101.FieldByName('权限').AsBoolean
else Result:=False;
DataModule1.ClientDataSet101.Active:=False;
except
end;
end;
这个函数仅对设置权限的人有效,不设置就有权。
这样,对不是很严格的管理权限的单位,不设置,就有权。
5、进入窗口菜单事件代码
procedure TBarPanel_9.spbut_1Click(Sender: TObject);
var iErr:Integer;
T:Boolean;
begin
if not GetPermissions_QX('医疗服务','系统设置') then
begin
MainFrm.CreateTabSheet(TSYS_Table_Frm,'系统设置','2001');
end
else begin
if GetPermissions('权限_医疗','用户',OperateName,'A30') // 读取权限
then MainFrm.CreateTabSheet(TSYS_Table_Frm,'系统设置','2001')
else ShowMessage('你无该项目管理权限!');
end;
end;
6、保存数据、打印、导出的按键事件代码
procedure TY_Daily_orders_Frm.Button13Click(Sender: TObject);
begin
if GetPermissions('权限_医疗','用户',OperateName,'B30') // 读取权限
then GridppReport2.PrintPreview(True)
else ShowMessage('你无权打印!');
end;
procedure TY_Daily_orders_Frm.Button10Click(Sender: TObject);
begin
if GetPermissions('权限_医疗','用户',OperateName,'B30') // 读取权限
then UpDataClientDBGridEhAll(DBGridEh2,ClientDataSet2,'药品_医嘱_常用',True,True)
else ShowMessage('你无编辑权权限!');
end;