软件模块管理权限的设置

      在应用软件中,通常将软件的功能分为若干个子程序,通过主程序调用。那么,通过众多客户来说,如果设置各人的权限呢?

     一、模板的权限

     .主程序MainFrm.EXE,通过菜单调用几十个子程序(模块)。如:

      1、主程序Main.EXE,通过菜单调用打开子程序,即模块程序:

      2、调用子程序又有三级菜单,打开业务窗口

     3、设置主程序调用的模块的权限

      通过(用户)登录名和密码,读取相关模块的权限,进入模块(子程序)。

     二、模块、子程序的管理权限

     1、模块的菜单

       每个模块通过三级菜单,通过管理40个左右窗口。仅有部门需要权限。那么,对于用户的权限一般有三个权限:

       (1)浏览的权限,可进入窗口观看数据;

       (2)编辑的权限,可对数据进行修改、增加、删除操作;

       (3)打印和导出EXCEL、PDF等文件操作;

     通常,我们将2、3权限合并。这样,对于每个窗口,用户就是二个权限:一是进入浏览权限,二是编辑打印的权限。

      2、设置模块、菜单、窗口的数据关系(用户与窗口权限的关系表)

     这里,要建立数据表,将模块、菜单、窗口和指定的二个权限,进行关联。见 上图。

     例如:A0 B0一对字段,对应一个这窗口的浏览权和编辑权,由此表指定。 

    3、 在模块程序中,设置“本模块”的管理权限  

       设置字段A0..A39, B0..B39,分别对应窗口的浏览权和编辑权。i

       数据表中一人一条信息,对应设置窗口的管理权限。  

       4、建立确定是否设置管理权限的函数

function GetPermissions_QX(s1,s2:string):Boolean;      // 获取是否设置权限
                       //  S1模块名 S2菜单2名称        // 数据空 返回True
var SQL:string;
    T:Boolean;
begin
  Result := False;
  SQL:='select 权限 From 系统_模块窗口配置 '+
       'where (模块='+#39+S1+#39+') and (分支='+#39+sFCID+#39+')';
  DataModule1.ClientDataSet101.Active:=False;
  DataModule1.ClientDataSet101.DataRequest(SQL);
  DataModule1.ClientDataSet101.Active:=True;
  if DataModule1.ClientDataSet101.RecordCount<=0 then            // 未设置权限 任何人都有权
  begin
    Result := True;
    Exit;
  end;
 //SQL:='select 权限,菜单2,模块 From 系统_模块窗口配置 '+
  SQL:='select 权限 From 系统_模块窗口配置 '+
       'where (模块='+#39+S1+#39+') and (菜单2='+#39+S2+#39+') and (分支='+#39+sFCID+#39+') and (用户='+#39+sName+#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;

      这个函数关键:

     (1)数据表数据为空,既未设置权限,末设置

     (2)只要设置一条窗口权限,搜索该窗口是否设置权限,否则末设置。

     (3)确定设置了管理权限,下一步再读取用户权限。

     这样,对不是一些不需要使用用户管理权限的单位,不设置,就可以了。

     6、读取用户窗口权限函数(用户与窗口权限的关系表)

function GetPermissions(DataName,Field1,S1,Field2:string):Boolean;  // 打开SQL数据库 读出权限
var SQL:string;
    T:boolean;
begin
  Result := False;
  if S1='' then Exit;
  if S1='AAAAAAA' then                                          // 默认管理员 都有权
  begin
    Result := True;
    Exit;
  end
  else begin
    SQL:='select '+Field2+' From '+DataName+' where (分支='+#39+sFCID+#39+') and ('+Field1+'='+#39+S1+#39+')';
    try
      DataModule1.ClientDataSet101.Active:=False;
      DataModule1.ClientDataSet101.DataRequest(SQL);
      DataModule1.ClientDataSet101.Active:=True;
      if DataModule1.ClientDataSet101.RecordCount>0 then
      T:=DataModule1.ClientDataSet101.FieldByName(Field2).AsBoolean;
    except
      Result:=False;
    end;
  end;
  Result:=T;
end;

     7、进入窗口菜单事件代码

     三层判断,

     第一层判断是否设置权限,如果没有设置,权限为真,否则进入下一层;

     第二层判断,模块权限中是否则有此用户,无此用户,权限为假,否则进入下一层;

     第二层判断,找到窗口的字段名,读取该用户,该字段的权限。 

      代码如下:

procedure TBarPanel_1.sSpeedButton11Click(Sender: TObject);
var sField:string;
    T:boolean;
begin
  T:=False;
  if not GetPermissions_QX('医疗服务','医嘱') then
  begin
    T:=True;
  end
  else begin
    sField:=GetPermissions_QX_Firld('医疗服务','医嘱',1);      // 获取模块窗口 浏览 编辑 字段
    if sField<>'' then
    begin
      T:=GetPermissions('管理权限_模块_医疗','用户',OperateName,sField);   // 读取权限
    end
    else begin
      T:=True;
    end;
  end;
  if T then MainFrm.CreateTabSheet(TY_Standing_orders_Frm,'长期医嘱','1013');
end;

   8、保存数据、打印、导出的按键事件代码

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;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值