软件模块管理权限的设置

news2024/9/23 23:26:33

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

     一、模板的权限

     .主程序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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis学习1--Redis简介与基础数据类型操作

1、什么是Redis? Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库 特点: 键值(key-value)型,value支持多种不同数据结构,功能丰富单线程,每个命令具…

Winform使用PictureBox控件显示图片并且自适应

一.首先我们只需要在项目文件中的/bin/Debug 下面创建一个文件夹保存你的照片。我这里文件夹名字叫Resources.。如图: 二. 然后我们把我们的照片放入Resources文件夹中即可。如图: 三.在构造器中添加picturebox控件。如图: 四.我们到初始化代…

Mybatis学习笔记教程

Mybatis-9.28 环境: JDK1.8Mysql 5.7maven 3.6.1IDEA 回顾: JDBCMysqlJava基础MavenJunit SSM框架:配置文件的。 最好的方式:看官网文档; 1、简介 1.1、什么是Mybatis MyBatis 是一款优秀的持久层框架它支持定制…

智能驾驶中的数据标注

目前,各大自动驾驶汽车制造商都在通过获取高质量的训练数据最大化其数据资产的投入产出比。在海量的智能驾驶数据面前,如何让每个数据都有存在意义?从《数字商业时代》对澳鹏Appen(中国)高级产品总监张童皓的采访中,你或许能找到一…

【Leetcode】二叉树进阶面试题

文章目录 二叉树创建字符串二叉树分层遍历(从前开始)二叉树分层遍历(从后开始)二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历(非递归&…

数仓学习---16、可视化报表(Superset)

星光下的赶路人star的个人主页 真正的才智是刚毅的志向 文章目录 1、Superset入门1.1 Superset概述1.2 环境说明 2、Superset安装2.1 安装Python环境2.1.1 安装Miniconda2.1.2 创建Python3.7 环境 2.2 Superset部署2.2.1 安装依赖2.2.2 安装Superset2.2.3 启动Superset2.2.4 Su…

黑客工具大全(网络安全)

1.Nmap 它是网络管理员必用的软件之一,以及用以评估网络系统安全。正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。 系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器&#xf…

性能如何通过分析后台资源确定瓶颈之磁盘网络

目录 影响性能的因素 磁盘 网络 应用程序-上下文切换 通俗的判断性能的好坏 影响性能的因素 磁盘 %Disk time指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。--磁盘的繁忙程度,一般不超过80%。 Disk reads(writes)b…

Linux-文件管理

1.文件管理概述 1.Bash Shell对文件进行管理 谈到Linux文件管理,首先我们需要了解的就是,我们要对文件做些什么事情? 其实无非就是对一个文件进行、创建、复制、移动、查看、编辑、压缩、查找、删除、等等 例如 : 当我们想修改系统的主机名…

momentjs

年月日 moment(date).format(YYYY-MM-DD) 年月日时间 moment(date).format(YYYY-MM-DD HH-MM-SS) 中文XX月XX日.moment(date).format(MMMDo)

A comprehensive survey on segment anything model for vision and beyond

视觉分割大模型的过去、现在和未来!SAM最新综述来了!今天自动驾驶之心很荣幸邀请到Garfield来分享视觉SAM分割大模型的最新综述,如果您有相关工作需要分享,https://mp.weixin.qq.com/s/-_QFvxBGzFpAgVGF-t-XRgSegment Anything Mo…

从游戏中理解《重构的时机和方法》(文末送书)

本次推荐的书籍是《重构的时机和方法》,该文是由法国克里斯蒂安克劳森(Christian Clausen) 著作,由郭涛翻译。 重构的时机和方法 寄语译者/本书作者原文作者群英推荐目录自我感受好书哪里来🤩免费的书籍哪里来🤩 寄语 作者寄语&a…

Tencent : TBDS

序言 腾讯大数据处理套件(Tencent Big Data Suite,TBDS)是基于腾讯多年海量数据处理经验,对外提供的可靠、安全、易用的大数据处理平台。您可以借助 TBDS 在公有云、私有云、非云化环境,根据不同数据处理需求选择合适…

栈和队列模拟实现(C++)

文章目录 1.deque的认识1.1介绍2.图析 2.stack模拟实现3.queue模拟实现4.优先级队列模拟实现4.1介绍4.2例题4.3模拟实现 5.测试函数 1.deque的认识 1.1介绍 双端队列 Deque(通常读作“deck”)是double-ended queue的不规则首字母缩写。双端队列是动态长度的序列容器&#xff0…

MySQL多表查询(联合查询、连接查询、子查询)

目录 多表联合查询 联合查询类型 多表连接查询 多表查询的分类 交叉查询(笛卡尔积) 内连接查询 外连接查询 自连接查询 子查询规则 子查询的分类 子查询的不同结果 EXISTS和NOT EXISTS 子查询应用的不同位置 不同外部语句的子查询应用情况…

spring boot--自动化注入组件原理、内嵌tomcat-1

前言 我们知道开发spring boot项目,在启动类上添加注解SpringBootApplication ,然后引入要自动注入的组件依赖,然后现application.properties中加上相应配置就可以自动注入这个组件,那么下面看看自动注入组件是如何实现的 一、S…

Idea 结合docker-compose 发布项目

Idea 结合docker-compose 发布项目 这里写目录标题 Idea 结合docker-compose 发布项目Docker 开启远程访问功能 添加相应端口配置IDEA 链接Docker配置项目 docker-compose.yml本地还需要安装 dockerwin11 安装本地Docker 可能存在问题 Linux内核不是最新 Docker 开启远程访问功…

回文链表——力扣234

文章目录 题目描述法一 将值复制到数组中后用双指针法法二 快慢指针 题目描述 法一 将值复制到数组中后用双指针法 class Solution { public:bool isPalindrome(ListNode* head) {vector<int> v;while(head!NULL){v.emplace_back(head->val);head head->next;}for…

同步、异步、阻塞、非阻塞

一、概念 同步与异步&#xff08;线程间调用&#xff09;的区别&#xff1a;关注的是调用方与被调用方之间的交互方式。同步调用会等待被调用方的结果返回&#xff0c;而异步调用则不会等待结果立即返回&#xff0c;可以通过回调或其他方式获取结果。 阻塞非阻塞&#xff08;…

Nautilus Chain 即将治理通证 NAUT ,生态发展进程加速

独特且优势明显的Nautilus Chain 目前&#xff0c;行业内首个模块化底层Nautilus Chain已经上线主网&#xff0c;并且即将有超过70个应用原生部署在Nautilus Chain上。Nautilus Chain本身是一个以Layer3为定位的区块链系统&#xff0c;其通过Celestia模块化底层来获得DA支持以…