简单客户系统的权限控制实现

实现 Git 目录权限控制 附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①【Java】学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版) ②【算法数据结构+acm】从入门到进阶吐血整理书单50+本(珍藏版) ③【数据库】从入门到进阶必读18本技术书籍网盘吐血整理网盘(珍藏版) ④【Web前端】从HT... 阅读详情

  一个客户系统最基本的功能是对客户的创建,修改,删除和查询。实现这样的功能通常是在数据库中建一个Customer表,然后通过程序实现以上基本功能。在一个个人环境的应用中,一个用户可以对所有的客户进行任意操作,基本不存在权限控制问题。在多用户系统中,客户属于一个人或者一群人,而对客户的操作权限也不可能是人人一样。所以需要对用户的操作做权限控制。

  这里有必要先对权限控制方式本身做一下讨论,有些系统用菜单进行权限控制,比如"新建客户","浏览客户",往往用操作名加上一个资源名代表一个权限,这样的权限控制有一个缺陷,就是一般漏掉了一个资源范围,比如浏览什么样的客户,就没有说明。当然也可以加上,比如浏览个人客户,浏览部门客户,浏览公司客户,但是随着需要控制资源类型的增加,通过不断增加菜单项来进行控制,并不是一个很好的方法。在B/S系统中的菜单控制,有2重意义,一是真正的菜单,没有权限的用户就看不到相应的菜单项,另外一个为了防止用户任意提交信息,在服务器端对用户提交的URL进行检查,看是不是有这个权限。比如对于用户请求的ListCus.do就要先检查用户是否有访问这个URL的权限:

public class ListCusAction extends Action{
   ...
   public ActionForward execute(...){
    ...
    //必须提供这样的检查的方法。
     PermitUtil.checkPermit(userID,url);
     list = dao.query(sql);
     ...
   }
}
另外一种控制办法是对操作和操作资源定义权限,比如用户A可以对客户进行修改操作。这样细粒度的权限控制对程序的扩展性和安全性有很大好处,但实现比前一种费时,下面通过分析说明2种方式的特点。

  作为客户系统最简单的一种考虑,是每个用户管理自己的客户。这种请况下,我们通过在Customer表中增加一个用户字段,就可以知道这个客户对应于哪一个用户。如下面的类所示:

public class Customer{
   private String ctmNo;
   private String ctmName;
   ...
   private String userID;
   //getters and setters
}
那么通过菜单的控制方式,我们认为每个有客户创建权的用户都可以创建属于自己的客户,什么叫客户创建权,就是可以看到和选择“添加客户”菜单项的用户。同时,“客户浏览”就表示浏览属于自己的客户,这样一来,创建客户的用户可以看到自己的客户,并进行操作,我们通过菜单控制权限方式完成了这个需求。需要注意的是:在用户进行相应操作前,我们先判断这个客户是不是属于这个用户,是就可以操作,不是就不可以。如下例所示:
public class DelCusAction extends Action{
   ...
   public ActionForward execute(...){
    ...
    //必须提供这样的检查的方法。
     dao.checkPermit(customer,userID);
     dao.delete(customer);
     ...
   }
}
进行这个判断是出于安全性考虑的,特别在B/S架构的软件系统中,你无法阻止客户向服务器端任意提交信息。比如用户A不使用菜单,向服务器请求"DelCus.do?ctmNo=No1",而No1属于用户B,如果不进行判断,客户就被删除掉了。所以光靠控制菜单项的显示完成权限控制,并不完整。

   现在我们接触一个更复杂一点的需求,就是客户转移,把客户从一个用户,指派给另外一个用户。在上面的实现基础上,只要添加一个接口,改变客户所属的用户,问题也就解决了。如下:

public class ChangeUserAction extends Action{
   ...
   public ActionForward execute(...){
    ...
     dao.checkPermit(customer,userID);
     //改变客户所属用户到newUserID。
     dao.changeUser(customer,newUserID);
     ...
   }
}

   每个用户现在可以管理自己的客户,也可以把客户交给别人管理,问题解决得完美。我们再考虑实际的情况,一个客户可能可以被一个用户看,但是不可以被修改或者删除。我们怎么控制这样的权限,加一个菜单项-"察看客户",用户A可以执行这个操作,但是不可以选择菜单项-"修改客户",针对每一个动作,我们加了一个菜单项。我们需要控制的内容变得越来越多。再深入分析,可以发现,其实上面的方案已经不能满足需求。 2个客户我们如何知道一个可以被用户A看,一个不可以,出现了一个资源的管理问题,必须有另外的方案来进行这种权限的控制。我们设计一个资源类:

public class CustomerResource{
   //客户编号
   private String ctmNo;
   //操作类型
   private String action;
   //用户
   private String userID;
   //setters and getters.
}
再设计一个资源管理类:
public class CustomerResourceManager{
   private static List resources;
   private static void addResources(CustomerResource resource){
     resources.add(resource);
   }
   //从数据库装载相应用户的客户操作权限。
   private static void retrieveResources(String userID){
   ...
   }
   //检查相应的权限是否在resources中存在。
   private static boolean checkPermit(CustomerResource permit){
   ...
   }
}
客户端使用类:
public class DelCusAction extends Action{
   ...
   public ActionForward execute(...){
     ...
     //必须提供这样的检查的方法。
     CustomerResource resource = new CustomerResource();
     resource.setCtmNo(customer.getCtmNo());
     resource.setAction("DELETE");
     resource.setUserID(userID);
     if(CustomerResourceManager.checkPermit(resource)){
       dao.delete(customer);
     }

     ...
   }
}
在采用了上面的权限检查方式后,我们可以对每一个客户指定相应操作人的权限,对客户的操作就限制在了操作类型的多少上,基本的有“UPDATE,INSERT,DELETE,LIST,VIEW”等,其余也可以定义“SUBMIT”等操作,具体取决于系统需求。这样的好处是权限控制非常灵活,客户可以作为资源在用户之间自由流动。但是作为一个给用户最终使用的权限系统,这样的却体系不适合于出现在用户权限系统设置里面,不能叫每个用户都去自己指定自己创建客户的操作范围,最好是通过这种方式实现默认的业务和权限设定,满足了用户需求,又屏蔽复杂性。在完整的系统中,基于菜单的控制也是必不可少,这样的方式方便用户使用,也更易于用户理解。 2者通常应结合使用。
Spring Boot + SpringSecurity + JWT 实现简单的 restful Api 权限控制 对于前后端分离的项目,后端对于接口访问的权限控制是必须要做的,也就是需要根据用户的权限进行控制,这样才能对我们的接口资源进行一定程度的保护,在一个web项目中,我们的通常做法是,允许登录后的用户进行接口资源的访问,否则就需要进行拦截,比较成熟也比较流行的做法如下图所示, 我们大致梳理一下这个认证的流程如下, 1、用户访问后端某个接口,或者是需要操作web页面某个功能,如果没有认证,需要进行页面跳... 阅读详情

相关推荐

CRM客户管理系统源码(权限模块)

整个项目由spring boot + springdatajpa完成 软件由sts4.0+mysql5.7等,非常详细的介绍了整个CRM系统中权限管理的模块,如何给用户添加角色,如何给角色添加权限

系统开发中的用户权限的两种流行实现。

用户权限,url拦截,这在系统开发是不可少的,也是很重要的一环。有时候,我们可能在页面隐藏掉某些功能,但是,一旦我们直接通过url访问,或者自己写代码去访问的时候,如果没有权限的控制,那么我们的私有数据将暴露。知道了其重要性,那么该怎么去实现一个管理url方便,且安全的权限系统呢。 其实现在市场上提供了很多第三方的安全框架,例如spring security,shrio。这些在工作中都是使用非常

shenbushen的专栏 3238

用户权限管理系统的设计与实现.

基于整合了Struts_和Hibernate_的J2EE_架构的用户权限管理系统的设计与实现.

实现权限控制的方法

权限控制是保证系统安全和数据完整性的重要手段,能够防止未经授权的访问和操作。在实际开发中,可以通过多种方式实现权限控制,包括基于文件系统、数据库以及框架的权限控制。在Java应用中,基于角色的访问控制是一种常见的实现方式,能够有效地管理用户权限。下面以一个基于角色的访问控制(RBAC)为例,演示如何在Java中实现权限控制。权限控制是指对用户或系统进程在访问系统资源时进行限制和管理,以确保只有合法的用户才能执行特定的操作。命令可以用来设置文件的读、写、执行权限。,我们将在该类中实现基于角色的权限控制。

技术研究中心 1671

VC++实现简单的用户登录系统(ADO)。包括修改密码功能!

VC++实现简单的用户登录系统(ADO)。包括修改密码功能!初始账号密码都是123

4. PCIe 接口时序

在上一篇中,大致介绍IPcore接口。总的来说接口如下图数据的接收和发送通过transmitTLPinterface和ReceiveTLPinterface。收发数据的时序也只是描述这几个接口的关系。从手册上截取PCIex1的接口时序。

jjinl的专栏 6122

【权限控制】一个通用的用户权限控制架构设计方案,可以适用于大多数应用场景

在设计用户权限控制的架构时,需要考虑系统的安全性、可扩展性、灵活性以及易维护性。

h1773655323的博客 3758

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 382

面向Windows的文件透明加解密解决方案(4)——客户端服务设计与功能实现

为了给实现更好的用户体验与轻量级、灵活性地交互设计,在局域网内管理端与客户端之间采用B/S 架构。客户端除了运行于系统底层的文件加解密驱动程序,还有运行于应用层的负责与服务器通信、控制加解密驱动的运行以及实现对恶意用户的部分防护功能。 4.1客户端程序的设计与实现 4.1.1基于HTTP协议与数字证书的用户认证 客户端与服务器的交互实际上是客户端与服务器的双向验证过程,使用HTTPS协议,客

某熊的技术之路 3480

OpenDRIVE车道计算避坑指南:为什么你的poly3曲线总对不齐?

本文深入解析OpenDRIVE标准中车道几何计算的三大核心难题:参数化三次多项式(ParamPoly3)的坐标系转换与参数映射、车道偏移与宽度的优先级判定,以及螺旋线(Spiral)接续的平滑性保障。通过实战案例与代码示例,提供了一套避免车道线错位与曲率不连续的精确计算与验证方法,是高精地图开发与仿真场景构建的实用避坑指南。

q9w8e7r6t5的博客 423

ADC噪声参数博弈论:为何24位ADC的有效分辨率可能不如16位?

本文深入探讨了ADC噪声参数的核心矛盾,揭示了24位ADC有效分辨率可能不如16位ADC的根本原因。关键在于跳出单纯比较位数的误区,转而关注输入参考噪声这一绝对指标。文章通过分析参考电压对满量程范围和噪声模型的影响,阐述了动态范围与最小可测信号之间的取舍逻辑,为工程师提供了基于系统实际需求的ADC选型与噪声评估框架。

snow3的博客 704

自己动手实现简单权限控制

最近接手一小型私活,用户量封顶上千,工期预期的也相对宽松,权限控制当然是必不可少。    web 权限控制,很多项目会引入 shiro/spring-security。    shiro/spring-security 继承 servlet-->filter抽象接口,运用合适的设计模式,    通过拦截客户端请求,来实现各个角色对系统资源的访问权限。    一时兴起,有了自

huantuo4908的博客 285

Conda环境创建报错?教你快速解决Solving environment: failed和ResolvePackageNotFound问题

本文深入解析Conda环境创建中常见的'Solving environment: failed'和'ResolvePackageNotFound'报错原因,并提供从基础到高级的系统化解决方案。涵盖渠道配置、版本通配、环境文件编辑等实用技巧,帮助开发者快速解决conda环境创建问题,提升工作效率。

weixin_28677451的博客 258

【案例分享-源码】简单易用的地图标注系统,一张地图让客户拜访增速提效

地图数据功能强大而灵活,让您在地图上自由绘制点(客户、网点、房源、广告位、景区等)、线(驾车路线、巡检路线、边界线等)以及面(行政区划、责任区域、覆盖范围等)元素,并为您的地图添加各种类型的字段内容。将精心绘制的地图以链接的形式分享到各大社交平台,以及各种通讯工具,只需轻轻一点,就能使众人一览您创作的地图,尽享便捷之快。支持自由绘制多边形、矩形、圆形等业务片区;将各类位置信息同时标记在地图上进行可视化管理,支持区域划分、数据导入、打卡签到、路径规划等功能,可多人协同,团队权限精准控制,数据在多端实时同步。

hymuuuu的博客 499

SAP FIORI静态磁贴从零到一:配置实战与权限打通

本文详细介绍了SAP FIORI静态磁贴的配置流程与权限管理,从准备工作到后台配置、目标映射、前台组织及权限分配,提供了实战技巧与常见问题解决方案。重点解析了静态磁贴的创建、目标映射配置及权限打通等关键步骤,帮助用户快速掌握FIORI静态磁贴的配置方法。

weixin_29266647的博客 249

Python使用netmiko配置华为交换机

1.netmiko就是专门为网络设备做的模块,非常强大。1.更适合网络设备的自动化运维模块。2、批量配置变更、备份。1.安装netmiko。2. 创建SSH连接。一、netmiko介绍。

博然的宝藏库 2795

基于Java+Swing实现餐厅点餐系统(含课程报告)

该系统针对两个方面的用户,一个是用餐客户,另一个是餐厅管理员。将功能划分成了四个模块,分别是管理员登录查看营业总账单功能、点菜选菜功能、顾客下单结账功能、改变餐厅名字字体样式功能,字体颜色功能。具体功能实现划分成四个窗口。运行环境:eclipse、jdk 四、其他系统 Java+Swing实现学生选课管理系统 Java+Swing实现学校教务管理系统 Java+Swing+sqlserver学生成绩管理系统 Java+Swing用户信息管理系统 Java+Swing实现的五子棋游戏 基于JavaSwing

qq_33037637的博客 2435

YOLOv26全流程实战手册:从yaml配置拆解到训练推理参数调优(附虚拟环境搭建)

以“车辆、行人、小型物体”3类数据集为例,修改# 1. 修改类别数nc: 3# 2. 调整锚框(适配小目标)anchors:- [12,16, 16,24, 33,23] # 增加小锚框# 3. 轻量化调整(边缘部署)depth_multiple: 0.25 # 降低深度系数width_multiple: 0.20 # 降低宽度系数# 其余Backbone/Head结构不变yaml配置:核心是调整nc(类别数)、(轻量化)、anchors(适配目标尺度);虚拟环境。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 878

Bloxstrap:Roblox 替代启动器完整指南(安装、功能与注意事项)

如果你想在 Windows 电脑上玩 Roblox,除了官方客户端自带的启动程序,还有一个开源选项值得关注:Bloxstrap。它是一个第三方 Roblox 替代启动器(alternative bootstrapper),负责接管"登录到启动游戏"这段流程,并在这段流程之上加了一批实用功能,比如 Discord 在线状态显示、内容文件自定义、服务器位置显示等。它的做法是替换启动层,而不是改动游戏客

gitblog_01127的博客 1098

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

CRM客户管理系统

一、项目的简单描述 1.什么是CRM CRM系统即客户关系管理系统,是指企业用CRM技术来管理与客户之间的关系。他的目标是缩减销售周期和销售成本,增加收入,寻找扩展业务所需的新的市场和渠道以及提高客户的价值,满意度,营利性和忠实度。CRM项目的实施可以分为3步,即应用业务集成。业务诗句分析和决策执行。 2.CRM开发环境和技术 <1> 项目业务介绍 客户关系管理是指企业为提高核心竞争力,利用相应的技术信息以及互联网技术协调企业与顾客间在消费,营销和服务上的交互,从而提升其管理方式,向客户提供创新

m0_47612445的博客 3万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

快速理解并实现权限控制

权限控制是指在一个系统或应用中对用户或角色的操作进行限制和管理的过程。它用于确保只有经过授权的用户或角色能够执行特定的操作或访问特定的资源。权限控制是信息安全和访问控制的重要组成部分。权限控制的主要目的是保护系统的安全性和完整性,防止未经授权的用户获取敏感信息、执行非法操作或对系统进行恶意操作。通过权限控制,可以限制用户或角色的访问权限和操作权限,确保系统只能被授权的用户或角色使用,提高系统的安全性。

weixin_53818172的博客 3259

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

下一篇: 测试SQL SERVER JDBC连接
slaser
博客等级 码龄23年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值