024-云E办_权限组->角色功能、菜单功能实现

本文介绍了权限组的结构,包括如何从用户到角色,再到角色与菜单的关联。详细讲解了角色功能,如查询、添加和删除角色,以及菜单功能,如查询所有菜单、根据角色查询菜单和更新角色菜单的操作。通过Spring Boot实现的控制器、服务和mapper组件展示。
摘要由CSDN通过智能技术生成

一、权限组的介绍:

在这里插入图片描述

---- 用户到角色:
admin用户表:测试员在用户表中id=6
admin_role用户角色表:id=6对应用户角色表中是adminId=6。adminId=6所对应角色rid=8
role角色表:rid=8对应的角色表中是测试管理员的角色
—角色到菜单:
menu_role菜单角色表:rid=8所对应的mid=7/23/25/26
menu菜单表:7/23/25/26:基本资料、基础信息、权限组、操作员。
也就是说明:测试管理员角色能访问的菜单有:基本资料、基础、权限、操作员

该模块提供角色的相关操作。在之前权限管理可以看到角色可以通过 用户_角色表用户表关联进而分配用户不同的角色,也可以通过菜单_角色菜单表关联进而分配不同角色可以拥有不同菜单的权限。
在权限组模块,我们只关注通过菜单_角色与菜单表关联进而分配不同角色可以拥有不同菜单的权限。
因此本模块有:角色功能和菜单功能:
角色功能的相关操作:查询角色、添加角色、删除角色。
菜单功能的相关操作:查询所有菜单、根据角色查询菜单、更新角色的菜单

在这里插入图片描述

二、角色功能实现

controller/PermissController

package com.xxxx.server.controller;

import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.pojo.Role;
import com.xxxx.server.service.IRoleService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 权限组:
 */

@RestController
@RequestMapping("/system/basic/permiss")
public class PermissController {
    @Autowired
    private IRoleService iRoleService;

    @ApiOperation(value = "获取所有角色")
    @GetMapping("/")
    public List<Role> getAllRole(){
        return iRoleService.list();
    }

    @ApiOperation(value = "添加角色")
    @PostMapping("/")
    public RespBean addRole(@RequestBody Role role){
        //由于security遵循必须有role_开头,判断插入的数据如果没有role_开头,则自动添加前缀
        if (!role.getName().startsWith("ROLE_")){
            role.setName("ROLE_"+role.getName());
        }
        if (iRoleService.save(role)){
            return RespBean.success("添加成功");
        }
        return RespBean.error("添加失败");
    }

    @ApiOperation(value = "删除角色")
    @DeleteMapping("/role/{rid}")
    public RespBean deleteRole(@PathVariable Integer rid){
        if (iRoleService.removeById(rid)){
            return RespBean.success("删除成功");
        }
        return RespBean.error("删除失败");
    }
}

在这里插入图片描述

三、菜单功能实现

1、查询所有的菜单:

菜单表:有三级菜单。需要子关联三次
在这里插入图片描述
在这里插入图片描述

SELECT
	m1.id AS id1,
	m1.`name` AS name1,
	m2.id AS id2,
	m2.`name` AS name2,
	m3.id AS id3,
	m3.`name` AS name3 
	FROM#三级菜单:
	t_menu m1,
	t_menu m2,
	t_menu m3 
	WHERE#m1顶级菜单
	m1.id = m2.parentId 
	AND m2.id = m3.parentId 
	AND m3.enabled = TRUE

1.controller

    //菜单:
    @ApiOperation(value = "查询所有的菜单")
    @GetMapping("/menus")
    public List<Menu> getAllMenus(){
        return iMenuService.getAllMenus();
    }

2.service

    /**
     * 查询所有的菜单
     * @return
     */
    List<Menu> getAllMenus();
    ---------------
    @Override
    public List<Menu> getAllMenus() {
        return menuMapper.getAllMenus();
    }

3.mapper

    /**
     * 获取所有菜单列表
     * @return
     */
    List<Menu> getAllMenus();

-----
<resultMap id="MenusWithChildren" type="com.xxxx.server.pojo.Menu" extends="BaseResultMap">
    <id column="id1" property="id"/>
    <result column="name1" property="name"/>

    <collection property="children" ofType="com.xxxx.server.pojo.Menu">
        <id column="id2" property="id"/>
        <result column="name2" property="name"/>

        <collection property="children" ofType="com.xxxx.server.pojo.Menu">
            <id column="id3" property="id"/>
            <result column="name3" property="name"/>
        </collection>
    </collection>
</resultMap>
------------------------------
<!-- 获取所有菜单列表-->
<select id="getAllMenus" resultMap="MenusWithChildren">
        SELECT
        m1.id AS id1,
        m1.`name` AS name1,
        m2.id AS id2,
        m2.`name` AS name2,
        m3.id AS id3,
        m3.`name` AS name3
        FROM
        t_menu m1,
        t_menu m2,
        t_menu m3
        WHERE
        m1.id = m2.parentId
        AND m2.id = m3.parentId
        AND m3.enabled = TRUE
</select>

2、根据角色id查询菜单id

    @ApiOperation(value = "根据角色id查询菜单id")
    @GetMapping("/mid/{rid}")
    public List<Integer> getMidByRid(@PathVariable Integer rid){
        List<MenuRole> rid1 = iMenuRoleService.list(new QueryWrapper<MenuRole>().eq("rid", rid));
        List<Integer> collect = rid1.stream().map(MenuRole::getMid).collect(Collectors.toList());
        return collect;
    }

3、更新角色菜单

1.controller

    @ApiOperation(value = "更新角色菜单")
    @PutMapping("/")
    //要传两个id,一个是角色id, 菜单id的数组
    public RespBean updateMenuRole(Integer rid,Integer[] mids){
        return iMenuRoleService.updateMenuRole(rid,mids);
    }
}

2.service

    /**
     * 更新角色菜单
     * @param rid
     * @param mids
     * @return
     */
    RespBean updateMenuRole(Integer rid, Integer[] mids);

@Service
public class MenuRoleServiceImpl extends ServiceImpl<MenuRoleMapper, MenuRole> implements IMenuRoleService {
    @Autowired
    private MenuRoleMapper menuRoleMapper;
    /**
     * 更新角色菜单
     * @param rid
     * @param mids
     * @return
     */
    @Override
    //事务的注解
    @Transactional
    public RespBean updateMenuRole(Integer rid, Integer[] mids) {
        //删除菜单
        menuRoleMapper.delete(new QueryWrapper<MenuRole>().eq("rid",rid));
        //添加菜单:
        if(null == mids || 0==mids.length){
            return RespBean.success("更新成功");
        }
        Integer integer = menuRoleMapper.insertRecord(rid, mids);
        if(integer == mids.length){
            return RespBean.success("更新成功");
        }

        return RespBean.error("更新失败");
    }

3.mapper

Integer insertRecord(@Param("rid") Integer rid, @Param("mids") Integer[] mids);
--------------------------
<!--
* 更新角色菜单
* @param rid
* @param mids
* @return
*/-->
<insert id="insertRecord">
   insert into t_menu_role(mid,rid) value
   <foreach collection="mids" item="mid" separator=",">
       (#{mid},#{rid})
   </foreach>
</insert>

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值