《尚品甄选》:后台系统——权限管理之角色管理(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()whereid = #{id}</update>

六、删除角色

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

在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2014年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2014 年考研管理类联考数学真题一、问题求解&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。真题&#xff08;2014-01&…

2024年襄阳中级工程师职称评审条件及要求

想要评审襄阳市中级工程师职称的小伙伴看过来&#xff0c;襄阳人社局对于评审所需的条件及要求如下。秋禾火带大家详细来了解一下 评审范围和人员要求 评审所申报的企业必须是在襄阳市注册登记满一年以上&#xff0c;正常运作的非公有制企业&#xff08;也就是私企&#xff09…

科普:多领域分布式协同仿真

分布式协同仿真是一种在分布式计算环境中进行协同工作的仿真方法。使用该方法进行协同仿真时&#xff0c;仿真任务将被分发到多个计算节点上&#xff0c;并且这些节点可以同时工作以模拟完整的系统行为。分布式协同仿真已被广泛应用于工程、科学和军事领域&#xff0c;以便更好…

Linux中vim的编译链接和gcc

gcc,g,gdb的安装 命令行写gcc,g,gdb根据提示安装:sudo apt install gcc/g/gdb gcc分布编译链接 (1)预编译: gcc -E main.c -o main.i (2)编译: gcc -S main.i -o main.s (3)汇编: gcc -c main.s -o main.o (4)链接 gcc main.o -o main 执行: ./main 或者:全路径/main 编译链…

LeetCode Hot100 108.将有序数组转为二叉搜索树

题目&#xff1a; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 方法&#xff1a; class Solution {public…

【Mybatis-Plus篇】Mybatis-Plus基本使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于Python 中创建 Sentinel-2 RGB 合成图像

一、前言 下面的python代码将带您了解如何从原始 Sentinel-2 图像创建 RGB 合成图像的过程。 免费注册后&#xff0c;可以从 Open Access Hub 下载原始图像。 请注意&#xff0c;激活您的帐户可能需要 24 小时&#xff01; 二、准备工作 &#xff08;1&#xff09;导入必要的库…

C#,《小白学程序》第十七课:随机数(Random)第四,移动平均值(Moving Average)的计算方法与代码

1 文本格式 /// <summary> /// 《小白学程序》第十七课&#xff1a;随机数&#xff08;Random&#xff09;第四&#xff0c;移动平均值的计算方法与代码 /// 继续学习数据统计&#xff0c;移动平均值的计算方法 /// 移动平均值就是一定步长内数值的平均值&#xff0c;用…

单片机、ARM、嵌入式开发、Android 底层开发有什么关系?

单片机、ARM、嵌入式开发、Android 底层开发有什么关系&#xff1f; 从我目前的见识来看&#xff1a; 单片机是个系统&#xff08;比如&#xff1a;51、AVR、PLC...&#xff09;&#xff0c;其中包含了去除了输入输出之外的运算器、控制器、存储器&#xff0c;我们用程序可以非…

Day31| Leetcode 455. 分发饼干 Leetcode 376. 摆动序列 Leetcode 53. 最大子数组和

进入贪心了&#xff0c;我觉得本专题是最烧脑的专题 Leetcode 455. 分发饼干 题目链接 455 分发饼干 让大的饼干去满足需求量大的孩子即是本题的思路&#xff1a; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {…

小程序中的大道理之三--对称性和耦合问题

再继续扒 继续 前一篇 的话题, 在那里, 提到了抽象, 耦合及 MVC, 现在继续探讨这些, 不过在此之前先说下第一篇里提到的对称性. 注: 以下讨论建立在前面的基础之上, 为控制篇幅起见, 这里将不再重复前面说到的部分, 如果您还没看过前两篇章, 阅读起来可能会有些困难. 这是第一…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(八)

套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型&#xff1a;1.1.2接口设计&#xff1a;1.1.3数据库设计&#xff1a; 1.2 代码开发1.2.1 DishController层1.2.2 DishService接口类1.2.3 DishServiceImpl接口实现类1.2.4 DishMapper层1.2.5 DishMapper.xml1.2.6 …