文章目录
- 一、权限管理介绍
- 二、表结构的设计
- 三、查询角色
- 四、添加角色
- 五、修改角色
- 六、删除角色
一、权限管理介绍
在后台管理系统中,权限管理是指为了保证系统操作的安全性和可控性,对用户的操作权限进行限制和管理。简单的来说就是某一个用户可以使用我们系统的哪些功能。比如:管理员可以使用后台管理系统中的所有功能,普通业务人员只能使用系统中的一部分的功能。因此,权限管理是后台管理系统中的一个重要功能模块。
二、表结构的设计
一般来说,权限管理包括以下几个方面:
-
用户管理:通过对用户进行账号、密码、角色等信息的管理。
-
角色管理:将多个用户分组,并根据所属角色的权限区分用户的访问权限。
-
菜单管理:对系统的菜单进行管理,根据用户或角色的权限动态生成可访问的菜单列表。
-
日志管理:记录系统的操作日志,方便用户或管理员查看系统运行情况,以及对不当操作进行追踪和处理。
为了方便理解,权限管理所涉及到数据库表以及其对应关系可以简单如下表示:
用户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>