访问权限控制

news2025/7/26 8:23:17

访问控制目的

在实际的组织中,为了完成组织的业务工作,需要在组织内部设置不同的职位,职位既表示一种业务分工,又表示一种责任与权利。根据业务分工的需要,职位被划分给不同群体,各个群体的人根据其工作任务的需要被赋予不同的职责和权利,每个人有权了解与使用与自己任务相关的信息与资源,对于那些不应该被知道的信息则应该限制他们访问。这就产生了访问控制的需求。

限制主体对资源的访问,限制用户可以访问而且只能访问自己被授权的资源,从而保障数据资源在合法范围内得以有效使用和管理。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。

访问控制策略

在权限管理中使用最多的还是基于角色访问控制(RBAC:Role Based Access Control)。基于角色的访问控制,是 20 世纪 90 年代研究出来的一种模型。这种模型的基本概念是把许可权(Permission)与角色(Role)联系在一起,用户通过充当合适角色的成员而获得该角色的许可权。

例如,在一间公司中,有老板、经理、行政、人事、财务等不同的职位,在通常情况下,职位所赋予的权利是不变的,但在某个职位上工作的人可以根据需要调整。RBAC 模型对组织内部的这些关系与访问控制要求给出了非常恰当的描述。

RBAC 重要对象

  • 用户(Employee):角色施加的主体;用户通过拥有某个或多个角色以得到对应的权限。
  • 角色(Role):表示一组权限的集合。
  • 权限(Permission):一个资源代表一个权限,是否能访问该资源,就是看是否有该权限。
    在这里插入图片描述

权限表设计

  • id 主键
  • 权限名称是给分配权限的人看的,用中文,见名知意。
  • 权限表达式是给程序做判断的时候用的,用英文,并规定统一格式。

权限来源

要做资源的访问权限限制,其实就是对系统中的动态资源或者说控制器中的处理方法做限制,因为处理方法包含对数据库的 CRUD 操作。换句话说,控制器中的处理方法就是一个一个权限,即数据库中权限表的数据来源于所有控制器的一个一个处理方法。权限表达式的值需要具有唯一性,那么我们就约定权限表达式组成:控制器类名首字母小写除去 Controller 加上方法名,例如:department:list,这样就可以唯一了。

权限数据录入

  • 一条条手动添加太麻烦,需要用代码来批量添加。我们自定义一个注解,在控制器的处理方法上贴该注解,并直接在注解上设置权限名称和权限表达式,自己再定义第三方程序扫描这些贴了注解的方法,用程序录入数据。而且使用注解实现的好处:
    • 一是可直接在注解上设置权限名称和权限表达式数据。
    • 二是可标识哪些方法(资源)需要进行权限控制,区分一个处理方法是否要做权限限制,就看是否有贴注解,贴了代表要限制,反之不要,代表所有人能访问。

需求:程序根据代码自动生成权限数据,无须用户一条一条手动添加,实现步骤
页面提供“权限加载”的按钮:

<a href="javascript:;" class="btn btn-success btn-reload" style="margin: 10px;">
    <span class="glyphicon glyphicon-repeat"></span> 重新加载
</a>
  • 给按钮绑定点击事件。
  • 点击后使用确认框提示用户 加载时间可能较长,是否确认进行加载?,用户确认后则发送请求到后台。
  • 后台接收到请求后,则进行加载逻辑。代码逻辑思路如下:
    • 获取 RequestMappingHandlerMapping 对象(直接用 @Autowired 注入),从该对象中获取所有的 HandlerMethod 对象(getHandlerMethods),判断方法是否有贴权限注解(getMethodAnnotation)。或者通过获取 Spring 容器对象(使用@Autowired 注入ApplicotionContext类型对象 ),再从中获取控制器对象(getBeansWithAnnotation(Controller.class).values()),获取所有的控制对象,遍历这个集合获得他们的字节码对象,反射获取所有控制器中的处理方法。
    • 若贴有自定义注解,则从注解中获取权限名称和权限表达式,创建 Permission 对象,封装数据,并放入LinkedHasSet进行去重并保持顺序,先删除权限表里原有的权限,再将这个集合中的权限一次性插入到权限表中。

Spring MVC 应用启动时,会利用 RequestMappingHandlerMapping 对象,搜集并分析每个控制器中每个带 @RequestMapping 注解的处理方法,通过 HandlerMethod 来封装和表示该方法,并与注解中的映射路径一一绑定。HandlerMethod 封装了很多属性,可以方便的访问到请求方法、方法参数、方法上的注解、所属类等信息。

角色管理

新增新增

给这个角色分配权限

  • 左边权限下拉框中显示所有的权限数据。
  • 完成权限的左移右移功能。
  • 角色保存时。按钮为普通按钮,绑定点击事件处理函数,在事件函数中把右边的 select 元素中的 option 设置为选中后,再提交表单,注意下拉框标签必须要拥有name属性,否则无法提交
    在这里插入图片描述 - 后台在保存角色时,还需要往角色权限中间表插入数据,保存角色和权限的关系。

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

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

相关文章

零代码极限封装的【接口自动化测试框架】震碎你的三观

随着互联网寒冬的到来&#xff0c;测试行业裁员的裁员&#xff0c;找工作的找工作&#xff0c;内卷越来越加剧&#xff0c;那么选择一个学习提升的平台尤为重要&#xff0c;接下来我要说的事情将震碎你的三观&#xff0c;震掉你的眼球&#xff0c;和每个测试人息息相关&#xf…

图像处理 QImage

在Qt中有四种处理图像的方法&#xff1a; QImage &#xff1a;使用I/O &#xff0c;可以对像素进行处理QPixmap&#xff1a;主要用在屏幕的显示QBitmap&#xff1a; QPixmap的子类&#xff0c;处理颜色深度&#xff0c;只能显示黑白两种颜色&#xff0c;用于遮罩QPicture&…

Qt通过Doc模式读取XML并设计一个增删改查方便的一个操作类

前言 如果对开源库TinyXml有兴趣的可以去看看这篇文章。 C使用TinyXml(开源库)读取*.XMl文件 目录前言DOC 文档对象模型QtXML基本结构操作XML部署环境添加信息头读取XML文件添加根节点添加一个没有属性的节点添加一个有属性的节点添加一个元素节点给节点单独设置属性删除所有同…

开源软件安全与应对策略探讨 - Java 机密计算技术应用实践

据统计&#xff0c;90% 以上的应用都在使用第三方软件库&#xff0c;这些软件大部分都是开源的。与此同时&#xff0c;有超过一半的全球 500 强公司都在使用存在漏洞的开源软件。这幅漫画生动的描述了一个大型应用软件的组件架构&#xff0c;它可能建立在一个极其脆弱的开源组件…

SpringBoot整合Swagger2+Knife4j,注解使用

SpringBoot整合Swagger2Knife4j,注解使用 文章目录SpringBoot整合Swagger2Knife4j,注解使用前言一、swagger是什么&#xff1f;二、使用步骤1.引入库2.使用swagger的相关注解总结前言 swagger和postman都是后端编写的测试接口使用方式&#xff0c;由于实际开发的需求和使用习惯…

基于springboot的汽车租赁管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

pytorch实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章地址&#xff1a; 365天深度学习训练营-第P1周&#xff1a;mnist手写数字识别&#x1f356; 作者&#xff1a;K同学啊一、 前期准备 1. 设置GPU import torch import torch.nn a…

MySQL8.0爬坑二三事

【下载】 地址&#xff1a;MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 【安装】 1.解压复制下面一堆文件到你需要的路径 2.如下图添加一个data文件夹&#xff0c;专门来放数据 3.新建一个my.ini的配置文件&#xff0c;里面内如如下 4…

如何将草料二维码收集到的表单信息同步至腾讯文档

在进行工业巡检场景如消防栓检查时&#xff0c;需要到达巡检地点后&#xff0c;扫描草料二维码&#xff0c;然后填写巡检的结果。事后&#xff0c;还需要有一个工作人员将草料二维码中的信息手动复制粘贴至腾讯文档中。那么能不能将我们信息填写后&#xff0c;自动就汇总至腾讯…

检索系统设计方案(重构)

记一次系统重构设计背景介绍设计步骤架构图介绍架构设计注意点总结背景介绍 搜索链路主要部分 搜索引擎链路都包含这三部分&#xff0c;数据源、搜索引擎服务、搜索业务。 是不是很简单&#xff0c;感觉搜索也没那么难&#xff1f; 搜索链路确实都包括这三部分&#xff0c;…

编程参考 - 编程中给变量起名时如何选择前缀,以及匈牙利命名法等

我最开始当程序员用C语言写代码&#xff0c;公司里推行编码规范&#xff0c;变量的前缀都是有规定的。 比如整型变量&#xff0c;前面都是 u8Name, i8Name, u16Name, i16Name之类的。 尤其是嵌入式编程&#xff0c;涉及到代码移植的问题&#xff0c;最好使用和平台无关的类型定…

显存优化综述

显存优化综述动态图和静态图静态图显存优化动态图显存优化DTR问题解决办法重计算的局限性Cooprecomputable in placeop-guided allocationLayout-aware Eviction实验效果消耗的时间显存碎片率搜索时间动态图和静态图 动态图是边计算边搭建计算图&#xff0c;中间结果一目了然。…

Quasar搭建教程初体验

文章目录一、Quasar框架介绍二、搭建一个简单的Quasar程序1、Quasar CLI安装2、创建Quasar应用程序3、运行Quasar三、使用Quasar开发SSR四、使用Quasar开发桌面应用(Electron)1、添加Quasar Electron模式2、运行开发五、使用Quasar移动应用(Capacitor)1、下载安装AndroidStudio…

测试用例设计方法之判定表法

概念&#xff1a; 等价类&#xff0c;边界值分析法一般是对单一输入进行测试用例分析的方法。 判定表是对其的一种补充&#xff0c;对于多种输入之间存在的组合关系并且对应执行不同动作&#xff0c;进行测试用例的分析的方法。 应用场景&#xff1a; 当一个界面中有多个控…

数据集成产品分析

数据集成产品分析 数据集成产品致力于异构数据源之间的数据交换与汇聚&#xff0c;该类产品是数据中台建设的第一环节&#xff0c;笔者将通过两篇文章对数据集成产品进行分析。 数据同步&#xff0c;又称为数据集成、数据迁移&#xff0c;主要用于实现不同系统间的数据流转。…

C++之结构、枚举

结构 C提供了struct关键字可以将不同类型封装在一起,形成结构体. 数组中存储的是相同类型的数据&#xff0c;而结构中可以存储不同类型的数据。定义结构就像定义一个新的数据类型一样. 结构是类的基石 结构的定义、声明与初始化 定义语法格式: struct 结构体类型名 { 成员…

深入浅出PyTorch——PyTorch生态简介+模型部署

1. 生态简介 介绍PyTorch生态在图像、视频、文本等领域中的发展&#xff0c;针对某个领域选择其中有代表性的一个工具包进行详细介绍 1.1 torchvision torchvision包含了在计算机视觉中常常用到的数据集&#xff0c;模型和图像处理的方式 函数作用 torchvision.datasets * 计…

PLC中ST编程的无符号数逻辑运算

AND与运算&#xff0c;两个数据每个位进行与运算&#xff0c;只有当相同位的值都为1时&#xff0c;那个位结果为1&#xff1b; 2# 0000 0100 1101 0010 2# 0001 0110 0010 1110 AND 2# 0000 0100 0000 0010 OR或运算&#xff0c;两个数据每个位进行或运算&#xff0c;只…

国产化Kettle、JDK、MySQL下载安装操作步骤

一、Kettle下载安装 &#xff08;一&#xff09;、kettle的下载 1、登录https://sourceforge.net/projects/pentaho/ 2、点击“Files”&#xff0c;进入Home / Data Integration 目录&#xff0c;下载需要的版本&#xff0c;以6.1为例。 3、点击“pdi-ce-6.1.0.1-196.zip”…

自制操作系统日记(8):变量显示

代码仓库地址&#xff1a;https://github.com/freedom-xiao007/operating-system 简介 上篇中&#xff0c;我们显示了静态的字符串在桌面上&#xff0c;本篇进一步探索&#xff0c;能将定义的整型变量的值显示在桌面上 探索历程说明 本来想着应该是一两天能搞定的&#xff…