• 【学生管理系统】权限管理之角色管理


    目录

    6.3 角色管理

    6.3.1 查询所有角色

    6.3.2 核心2:给角色授予权限(菜单)

    6.3.3 添加角色

    6.3 角色管理

    6.3.1 查询所有角色

    1)后端【已有】

    2)前端

    • 要求:左右分屏

    
    

    6.3.2 核心2:给角色授予权限(菜单)

    1)后端:查询所有的权限(含孩子)

    • 方式1:在controller中排序查询所有,然后使用Map进行缓存处理,将所有权限拼凑成父子关系。

    • 方式2:使用mapper注解版

      1. 编写PermMapper:查询指定父id的所有权限,需配置关联项(当前权限的所有的孩子)

      2. 编写service:查询所有

      3. 编写controller:查询所有

    1. 编写PermMapper:查询指定父id的所有权限,需配置关联项(当前权限的所有的孩子)

      package com.czxy.classes.mapper;
      ​
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.czxy.sys.SysPermission;
      import org.apache.ibatis.annotations.*;
      ​
      import java.util.List;
      ​
      /**
       * @author 桐叔
       * @email liangtong@itcast.cn
       * @description
       */
      @Mapper
      public interface SysPermissionMapper extends BaseMapper {
          /**
           * 通过父id查询所有的权限
           * @author 桐叔
           * @email liangtong@itcast.cn
           * @return
           */
          @Select("SELECT * FROM sys_permission WHERE parent_id = #{parentId}")
          @Results({
                  @Result(property = "id", column = "id"),
                  @Result(property = "permName", column = "permName"),
                  @Result(property = "parentId", column = "parent_id"),
                  @Result(property = "path", column = "path"),
                  @Result(property = "children", many = @Many(select = "com.czxy.classes.mapper.SysPermissionMapper.findAllByParentId"), column = "id")
          })
          public List findAllByParentId(@Param("parentId") Integer parentId) ;
      ​
      ​
      }
      ​

    2. 编写service:查询所有

      • 接口

        @Service
        @Transactional
        public interface SysPermissionService extends IService {
        ​
        ​
            public List findAllByParentId(Integer parentId) ;
        }
        ​

      • 实现类

        package com.czxy.classes.service.impl;
        ​
        import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
        import com.czxy.classes.mapper.SysPermissionMapper;
        import com.czxy.classes.service.SysPermissionService;
        import com.czxy.sys.SysPermission;
        import org.springframework.stereotype.Service;
        import org.springframework.transaction.annotation.Transactional;
        ​
        import java.util.List;
        ​
        /**
         * @author 桐叔
         * @email liangtong@itcast.cn
         * @description
         */
        @Service
        @Transactional
        public class SysPermissionServiceImpl extends ServiceImpl implements SysPermissionService {
        ​
            @Override
            public List findAllByParentId(Integer parentId) {
                return baseMapper.findAllByParentId(parentId);
            }
        }
        ​

    3. 编写controller:查询所有

      package com.czxy.classes.controller;
      ​
      import com.czxy.classes.service.SysPermissionService;
      import com.czxy.sys.SysPermission;
      import com.czxy.vo.BaseResult;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      ​
      import javax.annotation.Resource;
      import java.util.List;
      ​
      /**
       * @author 桐叔
       * @email liangtong@itcast.cn
       * @description
       */
      @RestController
      @RequestMapping("/perm")
      public class SysPermissionController {
          @Resource
          private SysPermissionService sysPermissionService;
      ​
      ​
          /**
           * 查询所有,含孩子
           * @author 桐叔
           * @email liangtong@itcast.cn
           * @return
           */
          @GetMapping("/parent/{parentId}")
          public BaseResult findAllByParentId(@PathVariable("parentId") Integer parentId) {
              // 查询
              List list = sysPermissionService.findAllByParentId(parentId);
              return BaseResult.ok("查询成功", list);
          }
      ​
      }
      ​

       

    2)后端:查询指定角色的所有的权限

    • 提交数据:roleId = 1

    • 获得数据:[ {roleId: 1, permId: 1}, {roleId: 1, permId: 2}, ...] --> [1,2,3,4]

    package com.czxy.classes.controller;
    ​
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.czxy.classes.service.SysRolePermissionService;
    import com.czxy.sys.SysRolePermission;
    import com.czxy.vo.BaseResult;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    ​
    import javax.annotation.Resource;
    import java.util.List;
    import java.util.stream.Collectors;
    ​
    /**
     * @author 桐叔
     * @email liangtong@itcast.cn
     * @description
     */
    @RestController
    @RequestMapping("/rolePerm")
    public class SysRolePermissionController {
        @Resource
        private SysRolePermissionService sysRolePermissionService;
    ​
        @GetMapping("/role/{roleId}")
        public BaseResult findAllByRoleId(@PathVariable("roleId") Integer roleId) {
            //1 条件 roleId = 1
            QueryWrapper queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("role_id", roleId);
    ​
            //2 查询所有- 角色权限对象
            List list = sysRolePermissionService.list(queryWrapper);
    ​
            //3 处理数据,只需要权限id
            List roleIdList = list.stream().map(sysRolePermission -> sysRolePermission.getPermId()).collect(Collectors.toList());
    ​
            //4 返回
            return BaseResult.ok("查询成功", roleIdList);
        }
    ​
    ​
    }
    ​
    

    3)前端:展示所有的权限

    • 编写变量、发送ajax查询、页面加载成功时调用

    • 使用tree进行展示

       

    
    

    4)前端:回显指定角色的权限

    • 表格行的点击,并获得当前行的数据

    • 查询当前角色对应的所有选线,并回显到tree中

     

        async findAllPermByRoleId(row, column, event) {
          // ajax 查询   /user-service/rolePerm/role/1
          let { data: baseResult } = await this.$axios.get(`/user-service/rolePerm/role/${row.id}`)
          // 处理
          if(baseResult.code == 20000) {
            // 查询成功,将查询的结果填充到右侧tree中
            this.$refs.permTree.setCheckedKeys(baseResult.data);
          } else {
            this.$message.error(baseResult.message)
          }
        }

    5)前端:提交授权表单

     

    6)后端:授权

    • 编写controller

    • 编写service

    • 编写controller

       

          @PostMapping("/addPerm")
          public BaseResult addPermWithRoleId(@RequestBody SysRole sysRole) {
              try {
                  // 添加权限
                  sysRolePermissionService.addPermWithRoleId(sysRole);
      ​
                  // 提示
                  return BaseResult.ok("授权成功");
              } catch (Exception e) {
                  return BaseResult.error("授权失败");
              }
      ​
          }

    • 编写service

       

      • 接口

        @Service
        @Transactional
        public interface SysRolePermissionService extends IService {
            void addPermWithRoleId(SysRole sysRole);
        }

      • 实现类

        package com.czxy.classes.service.impl;
        ​
        import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
        import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
        import com.czxy.classes.mapper.SysRolePermissionMapper;
        import com.czxy.classes.service.SysRolePermissionService;
        import com.czxy.sys.SysRole;
        import com.czxy.sys.SysRolePermission;
        import org.springframework.stereotype.Service;
        import org.springframework.transaction.annotation.Transactional;
        ​
        /**
         * @author 桐叔
         * @email liangtong@itcast.cn
         * @description
         */
        @Service
        @Transactional
        public class SysRolePermissionServiceImpl extends ServiceImpl implements SysRolePermissionService {
        ​
            @Override
            public void addPermWithRoleId(SysRole sysRole) {
                // 1 删除
                QueryWrapper queryWrapper = new QueryWrapper<>();
                queryWrapper.eq("role_id", sysRole.getId());
                baseMapper.delete(queryWrapper);
        ​
                // 2 添加
                for (Integer permId : sysRole.getPermIds()) {
                    SysRolePermission sysRolePermission = new SysRolePermission(sysRole.getId(), permId);
                    baseMapper.insert(sysRolePermission);
                }
            }
        }
        ​

    6.3.3 添加角色

  • 相关阅读:
    opengrok源代码在线阅读平台搭建及字体修改
    【Linux】[gdb]Linux环境下如何调试代码
    LeeCode第 312 场周赛
    想在期货市场存活 需要关注什么数据?
    PE73_D_E6_BLE
    淘宝/天猫API:item_search_pro-高级关键字搜索淘宝商品
    etcd的安装和使用
    【实践篇】一次Paas化热部署实践分享
    机车外套哈哈我真的是因为
    界面组件Telerik UI for WPF入门指南 - 如何使用主题切换自定义样式
  • 原文地址:https://blog.csdn.net/weixin_45481821/article/details/127453304