《尚品甄选》:后台系统——权限管理之角色管理(debug一遍)

文章目录

  • 一、权限管理介绍
  • 二、表结构的设计
  • 三、查询角色
  • 四、添加角色
  • 五、修改角色
  • 六、删除角色


在这里插入图片描述

一、权限管理介绍

在后台管理系统中,权限管理是指为了保证系统操作的安全性和可控性,对用户的操作权限进行限制和管理。简单的来说就是某一个用户可以使用我们系统的哪些功能。比如:管理员可以使用后台管理系统中的所有功能,普通业务人员只能使用系统中的一部分的功能。因此,权限管理是后台管理系统中的一个重要功能模块。

二、表结构的设计

一般来说,权限管理包括以下几个方面:

  • 用户管理:通过对用户进行账号、密码、角色等信息的管理。

  • 角色管理:将多个用户分组,并根据所属角色的权限区分用户的访问权限。

  • 菜单管理:对系统的菜单进行管理,根据用户或角色的权限动态生成可访问的菜单列表。

  • 日志管理:记录系统的操作日志,方便用户或管理员查看系统运行情况,以及对不当操作进行追踪和处理。


为了方便理解,权限管理所涉及到数据库表以及其对应关系可以简单如下表示:

用户lucy担任的角色是总经理,其权限是可以操作所有菜单;用户mary担任的角色是销售人员,其权限仅仅是操作商品管理。
在这里插入图片描述

一个用户可以担任多个角色,反之亦然,因此用户表与角色表是多对多的关系;一个角色操作多个菜单,一个菜单可以被多个角色操作,因此角色表与菜单表也是多对多的关系。为了建立用户表与角色表的联系,需要建立角色用户关系表,用来存储uid与roleid;同样,也需要建立角色菜单关系表,通过roleid与mid来建立角色表与菜单表的联系

在这里插入图片描述
此次来完成管理角色功能模块,因此来看看角色表具体是如何设计的:

CREATE TABLE `sys_role` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色id',
  `role_name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',
  `role_code` varchar(20) DEFAULT NULL COMMENT '角色编码',
  `description` varchar(255) DEFAULT NULL COMMENT '描述',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0:可用 1:不可用)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb3 COMMENT='角色'

三、查询角色

需求说明:
1、如果在搜索表单中输入角色名称,此时就需要按照角色名称进行模糊查询
2、搜索的时候需要进行分页搜索

我们来debug走一遍流程:输入"人员"进行模糊搜索

在这里插入图片描述
点击搜索,首先来到controller层,可以看到,该层接收到前端传来的参数。默认当前页是第一页,每页大小为3。

在这里插入图片描述
进入到service层,通过模糊查询,我们可以看到查询到了3条数据,保存在List列表中。
在这里插入图片描述
返回的pageInfo是分页插件自带的,包含很多信息。
在这里插入图片描述
最后来看看SQL是如何编写的:

    <!--    List<SysRole> findByPage(SysRoleDto sysRoleDto);-->
    <select id="findByPage" resultType="com.atguigu.spzx.model.entity.system.SysRole">
        select * from sys_role
        <where>
            <if test="roleName != null and roleName != ''">
                and role_name like concat('%',#{roleName},'%')
            </if>
            and is_deleted = 0
        </where>
        order by id desc
    </select>

四、添加角色

需求说明:
当用户点击添加按钮的时候,弹出对话框,在该对话框中需要展示添加角色表单。当用户在该表单中点击提交按钮的时候那么此时就需要将表单进行提交,在后端需要提交过来的表单数据保存到数据库中即可。页面效果如下所示:
在这里插入图片描述
让我们来debug一遍:

首先来到controller层,用实体类来封装前端发送来的数据。
在这里插入图片描述

service层也很简单,就是调用mapper层接口,把用户数据插入数据库。
在这里插入图片描述
SQL也很简单,让我们来看看:

    @Insert("insert into sys_role(role_name,role_code,description) values (#{roleName},#{roleCode},#{description})")
    void save(SysRole sysRole);

五、修改角色

需求说明:
当用户点击修改按钮的时候,弹出对话框,在该对话框中需要将当前行所对应的角色数据在该表单页面进行展示。当用户在该表单中点击提交按钮的时候那么此时就需要将表单进行提交,在后端需要提交过来的表单数据修改数据库中的即可。页面效果如下所示:
在这里插入图片描述

让我们来debug一遍:跟之前一样,也是先来到controller层,用实体类接收修改后的数据
在这里插入图片描述
service层继续调用mapper接口,实现修改功能
在这里插入图片描述

让我们看看修改的SQL语句是如何编写的:

<!--    void update(SysRole sysRole);-->
    <update id="update">
        update sys_role set
        <if test="roleName != null and roleName != ''">
            role_name = #{roleName},
        </if>
        <if test="roleCode != null and roleCode != ''">
            role_code = #{roleCode},
        </if>
        <if test="description != null and description != ''">
            description = #{description},
        </if>
        update_time = now()
        where
        id = #{id}
    </update>

六、删除角色

需求说明:
当点击删除按钮的时候此时需要弹出一个提示框,询问是否需要删除数据?如果用户点击是,那么此时向后端发送请求传递id参数,后端接收id参数进行逻辑删除。页面效果如下所示:
在这里插入图片描述
话不多说,继续debug一遍:controller层首先获取到要删除角色的id值

在这里插入图片描述

接着service层获取id值,调用mapper接口,实现逻辑删除,事实上就是执行更新语句。
在这里插入图片描述
SQL语句编写如下:

    <!--    void delete(Long roleId);-->
    <update id="delete">
        update sys_role set
        update_time = now(),
        is_deleted = 1
        where
        id = #{roleId}
    </update>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库——存储函数(介绍、案例)

目录 介绍 案例 介绍 存储函数是有返回值的存储过程&#xff0c;存储函数的参数只能是IN类型的。具体语法如下&#xff1a; CREATE FUNCTION 存储函数名称 ([ 参数列表 ]) RETURNS type [characteristic ...] BEGIN-- SQL语句RETURN ...;END ; characteristic说明&#xf…

【如何学习Python自动化测试】—— Python 的 unittest 框架

10 、Python 的 unittest 框架 10.1 Unittest 框架介绍 Unittest是Python语言中的一种测试框架&#xff0c;是Python标准库中的一个模块。它可以帮助开发者编写自动化测试&#xff0c;可以进行单元测试、集成测试、功能测试等各种类型的测试。 Unittest的特点是简单易学&#…

蓝桥杯第2119题 特殊时间 C++ 思维暴力

题目 思路和解题方法 1110 代表 1110年11月10号11点10分1110 4*4*4 有0111 1011 1101 1110 可以符合年 月日 时分秒的都有4种例如 1113有1113 1131 1311 3111 年份符合月日只有11 13 时分秒 只有11 13 11 31 13 11 无31 11 c 代码 #include <bits/stdc.h> using…

【开源】基于微信小程序的智慧家政系统

项目编号&#xff1a; S 063 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S063&#xff0c;文末获取源码。} 项目编号&#xff1a;S063&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服…

如何理解2023vivo开发者大会,使用Rust语言编写蓝河操作系统(BlueOS)?

在2023年vivo开发者大会上&#xff0c;vivo宣布使用Rust语言编写其蓝河操作系统&#xff08;BlueOS&#xff09;。 什么是Rust语言&#xff1f; Rust 是一种开放源代码系统编程语言&#xff0c;可用于开发高效、安全的软件。 使用 Rust 可管理内存并控制其低级详细信息。 但你…

05 _ 系统设计目标(三):如何让系统易于扩展?

从架构设计上来说&#xff0c;高可扩展性是一个设计的指标&#xff0c;它表示可以通过增加机器的方式来线性提高系统的处理能力&#xff0c;从而承担更高的流量和并发。 你可能会问&#xff1a;“在架构设计之初&#xff0c;为什么不预先考虑好使用多少台机器&#xff0c;支持…

11.几何(曲线与曲面)

曲线 1.Bzier Curves 贝塞尔曲线. angents&#xff08;切线&#xff09;来定义贝塞尔曲线&#xff0c;规定了起点和终点必须是p0和p3&#xff0c;起始方向必须沿着p0p1方向&#xff0c;终点方向必须沿着p2p3方向 2. de Casteljau Algorithm&#xff08;算法&#xff09; 如何…

从0开始学习JavaScript--JavaScript事件:响应与交互

JavaScript的事件处理是Web开发中至关重要的一部分&#xff0c;通过事件&#xff0c;能够实现用户与页面的互动&#xff0c;使得网页更加生动和交互性。本文将深入探讨JavaScript事件的各个方面&#xff0c;包括事件的基本概念、事件类型、事件对象、事件冒泡与捕获、事件委托、…

【技术分享】RK3399 Ubuntu通过Python实现录音和播放功能

​本文基于IDO-SBC3968 Ubuntu 系统通过Python脚本实现录音和播放功能。 IDO-SBC3968采用RK3399国产六核64位CPU高性能处理器&#xff0c;支持4K HDMI2.0显示&#xff0c;接口丰富&#xff0c;拥有千兆以太网&#xff0c;全协议TypeC接口&#xff0c;USB3.0 &#xff0c;eDP 和…

使用ETLCloud实现CDC实时数据集成:从MySQL到ClickHouse的实时数据同步

背景 在上一篇文章中体验了 ETLCloud 的离线数据迁移功能&#xff0c;就像大数据领域里有离线计算和实时计算&#xff0c; ETLCloud 还提供了基于 CDC &#xff08;Change Data Capture&#xff09;的实时数据集成功能&#xff1a;实时数据集成是指通过变化数据捕获技术&#…

数组的申明

数组是一组相同类型的数据 数组中的数据需要通过数字索引来访问。 数组的声明需要使用new关键字 在声明数组时&#xff0c;可以使用{}来初始化数组中的数组 如果在数组声明之初没有使用大括号来初始化数组的元素&#xff0c;则需要指定数组的大小 在声明初始化元素的数组时…

调试器gdb

目录 一、调试 1、前言 2、 debug和release 二、基本操作 1、退出 quit 2、开始调试 r 3、打断点 b 4、查看断点 info b 5、查看代码 l 6、删除断点 d 7、逐过程 n 8、打印变量内容 p 9、逐语句&#xff08;进入函数&#xff09; s 10、查看函数调用堆栈 bt 11、…

Nginx反向代理实现负载均衡webshell

目录 本实验所用的环境&#xff1a; 问题一&#xff1a;由于nginx采用的反向代理是轮询的方式&#xff0c;所以上传文件必须在两台后端服务器的相同位置上传相同的文件 问题二&#xff1a;我们在执行命令时&#xff0c;无法知道下次的请求交给哪台机器去执行我们在执行hostn…

堆和栈的区别 重点来说一下堆和栈;堆与栈之间的联系

文章目录 堆和栈的区别重点来说一下堆和栈&#xff1a;那么堆和栈是怎么联系起来的呢? 堆与栈的区别 很明显&#xff1a; 今天来聊一聊java中的堆和栈&#xff0c;工作当中这两个也是经常遇到的&#xff0c;知识我们没有去注意理论上的这些内容&#xff0c;今天就来分享一下。…

Ps:拾色器 - 选取专色

在 Adobe 拾色器中&#xff0c;可点击“颜色库” Color Libraries按钮来选取专色。 首先在色库 Book列表中选择对应的色库&#xff0c;然后在中间的色相条中选择需要的样本组&#xff0c;再从左侧颜色列表中选取颜色。 可以直接键入颜色名称来选择。比如&#xff0c;键入 13&am…

【ArcGIS Pro微课1000例】0038:基于ArcGIS Pro的人口密度分析与制图

文章目录 一、人口密度二、人口密度分析1. 点密度分析2. 核密度分析三、结果比对一、人口密度 人口密度是指单位土地面积上居住的人口数,通常以每平方千米或每公顷内的常住人口为单位计算。人口密度同资源、经济密切结合,因此,科学准确地分析人口密度的分布情况,对合理制定…

【数据结构】树与二叉树(廿三):树和森林的遍历——层次遍历(LevelOrder)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法5.3.3 树和森林的遍历1. 先根遍历&#xff08;递归、非递归&#xff09;2. 后根遍历&#xff08;递归、非递归&#xff09;3. 森林的遍历4. 层次遍历a. 算法LevelOrderb. 算法解读c. 时间复杂度d.代码…

MATLAB在信号系统中的应用

1.产生一个幅度为1, 基频为2Hz&#xff0c;占空比为50%的周期方波.要求画出图形。 在MATLAB中&#xff0c;函数square(w0*t, DUTY)产生基本频率为w0 (周期T2*pi/w0)、占空比DUTY (τ/T)*100的周期矩形波&#xff08;方波&#xff09;&#xff0c;默认情况下占空比DUTY50。占空…

Nivision 图像处理方法-Brightness(BCGTransform)实现验证测试

测试发现NIvision中实际使用的公式是: int brightness199; float contrast61.38; float gamma0.52; uchar lut[256]; float k tan(contrast*CV_PI / 180); for (int i 0; i < 256; i) { lut[i] saturate_cast<uchar>(k*(pow(i, gamma)/ pow(255, gamma) * 2…

操作系统——操作系统概论s

一、操作系统基本概念 1 操作系统定义 操作系统是裸机上的第一层软件&#xff0c;它是对硬件系统功能的首次扩充&#xff0c; 用以填补人与机器之间的鸿沟。 OS定义&#xff1a;操作系统是控制和管理计算机系统内各种硬件和软件资源&#xff0c;有效地组织多道程序运行的系统软…