实战13 分配角色

发布时间:2023年12月28日

目录

1、分配角色思路

2、分配角色回显接口实现

3、分配角色回显前端实现

3.1 编写前端api脚本代码

3.2 编写分配角色窗口代码?

?3.3 编写分配角色回显脚本代码

4、分配角色后端接口

4.1 UserRoleDTO

4.2 UserMapper

4.3 UserMapper.xml

4.4 UserService

4.5 UserServiceImpl

4.6 UserController

5、分配角色前端实现

5.1 前端API脚本

5.2 分配角色窗口确认事件


1、分配角色思路

2、分配角色回显接口实现

RoleMapper

    /**
     * 根据用户ID查询该用户拥有的角色ID
     * @param userId
     * @return
     */
    @Select("select role_id from `sys_user_role` where user_id = #{userId}")
    List<Long> findRoleIdByUserId(Long userId);

RoleService

    /**
     * 根据用户ID查询该用户拥有的角色ID
     * @param userId
     * @return
     */
    List<Long> findRoleIdByUserId(Long userId);

RoleServiceImpl

    /**
     * 根据用户ID查询该用户拥有的角色ID
     *
     * @param userId
     * @return
     */
    @Override
    public List<Long> findRoleIdByUserId(Long userId) {
        return baseMapper.findRoleIdByUserId(userId);
    }

UserController

/**
     * 获取分配角色列表
     * @param roleQueryVo
     * @return
     */
    @GetMapping("/getRoleListForAssign")
    @PreAuthorize("hasAuthority('sys:user:assign')")
    public Result getRoleListForAssign(RoleQueryVo roleQueryVo){
        //创建分页对象
        IPage<Role> page = new Page<Role>(roleQueryVo.getPageNo(), roleQueryVo.getPageSize());
        //调用查询方法
        roleService.findRoleListByUserId(page,roleQueryVo);
        //返回数据
        return Result.ok(page);
    }

    
   /**
     * 根据用户ID查询该用户拥有的角色列表
     * @param userId
     * @return
     */
    @GetMapping("/getRoleByUserId/{userId}")
    @PreAuthorize("hasAuthority('sys:user:assign')")
    public Result getRoleByUserId(@PathVariable Long userId){
        //调用根据用户ID查询该用户拥有的角色ID的方法
        List<Long> roleIds = roleService.findRoleIdByUserId(userId);
        return Result.ok(roleIds);
    }

3、分配角色回显前端实现

3.1 编写前端api脚本代码

3.2 编写分配角色窗口代码?

 <!-- 分配角色窗口 -->
      <system-dialog
        :title="assignDialog.title"
        :height="assignDialog.height"
        :width="assignDialog.width"
        :visible="assignDialog.visible"
        @onClose="onAssignClose"
        @onConfirm="onAssignConfirm">
        <div slot="content">
          <!-- 分配角色数据列表 -->
          <el-table
            ref="assignRoleTable"
            :data="assignRoleList"
            border
            stripe
            :height="assignHeight"
            style="width: 100%; margin-bottom: 10px"
            @selection-change="handleSelectionChange">
            <el-table-column type="selection" width="55" align="center"></el-table-column>
            <el-table-column prop="roleCode" label="角色编码"/>
            <el-table-column prop="roleName" label="角色名称"/>
            <el-table-column prop="remark" label="角色备注"/>
          </el-table>
          <!-- 分页工具栏 -->
          <el-pagination
          @size-change="assignSizeChange"
          @current-change="assignCurrentChange"
          :current-page.sync="roleVo.pageNo"
          :page-sizes="[10, 20, 30, 40, 50]"
          :page-size="roleVo.pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="roleVo.total"
          background></el-pagination>
        </div>
      </system-dialog>

?3.3 编写分配角色回显脚本代码

 /**
    * 打开分配角色
    */
    async assignRole(row){
      //防止回显出现问题
      this.selectedIds = [];
      this.selectedUserId = "";
      //被分配用户的id
      this.selectedUserId = row.id;
      //显示窗口
      this.assignDialog.visible = true;
      //设置标题
      this.assignDialog.title = `给【${row.realName}】分配角色`;
      //查询当前登录用户的所有角色信息
      await this.getAssignRoleList();
      //获取当前被分配用户的ID
      let params = {
        userId: row.id,
      };
      //发送根据用户ID查询角色列表的请求
      let res = await userApi.getRoleIdByUserId(params);
      //如果存在数据
      if (res.success && res.data){
        //将查询到的角色ID列表交给选中角色数组
        this.selectedIds = res.data;
        //循环遍历
        this.selectedIds.forEach((key) => {
          this.assignRoleList.forEach((item) => {
            if (item.id === key) {
              this.$refs.assignRoleTable.toggleRowSelection(item, true);
            }
          });
        });
      }
    },
    /**
    * 查询当前登录用户的所有角色信息
    */
    async getAssignRoleList(pageNo = 1, pageSize = 10) {
      //给用户ID赋值
      this.roleVo.userId = this.$store.getters.userId;
      this.roleVo.pageNo = pageNo;
      this.roleVo.pageSize = pageSize;
      //发送查询请求
      let res = await userApi.getAssignRoleList(this.roleVo);
      //判断是否成功
      if (res.success) {
        //角色列表赋值
        this.assignRoleList = res.data.records;
        //角色总数量赋值
        this.roleVo.total = res.data.total;
      }
    },
    /**
    * 分配角色取消事件
    */
    onAssignClose(){
      //隐藏窗口
      this.assignDialog.visible = false;
    },
    /**
    * 分配角色确认事件
    */
    async onAssignConfirm(){
      //判断用户是否有选中角色
      if (this.selectedIds.length === 0) {
        this.$message.warning("请选择要分配的角色!");
        return;
      }
      let params = {
        userId: this.selectedUserId,
        roleIds: this.selectedIds,
      };
      //发送请求
      let res = await userApi.assignRoleSave(params);
      //判断是否成功
      if (res.success) {
        this.$message.success(res.message);
        //关闭窗口
        this.assignDialog.visible = false;
      } else {
        this.$message.error(res.message);
      }
    },
  /**
    * 当每页数量发生变化时触发该事件
    */
    assignSizeChange(size){
      this.roleVo.pageSize = size; //将每页显示的数量交给成员变量
      this.getAssignRoleList(this.roleVo.pageNo, size);
    },
    /**
    * 当页码发生变化时触发该事件
    */
    assignCurrentChange(page){
      this.roleVo.pageNo = page;
      //调用查询方法
      this.getAssignRoleList(page, this.roleVo.pageSize);
    },
    /**
    * 当点击多选框时触发该事件
    */
    handleSelectionChange(rows){
      // let roleIds = [];
      // //循环遍历选中的角色ID
      // for (let i = 0; i < rows.length; i++) {
      //   //将当前选中的角色ID放到数组中
      //   roleIds.push(rows[i].id);
      // }
      // //将选中的角色ID交给成员变量
      // this.selectedIds = roleIds;
      this.selectedIds = rows.map(item => item.id);//等同于上述代码
    }

4、分配角色后端接口

4.1 UserRoleDTO

package com.cizhu.dto;

import lombok.Data;

import java.util.List;

/**
 * @author bingo
 * @description 用于给用户分配角色时保存选中的角色数据
 * @date 2022-11-09
 */
@Data
public class UserRoleDTO {
    private Long userId;
    private List<Long> roleIds;
}

4.2 UserMapper

    /**
     * 保存用户角色关系
     * @param userId
     * @param roleIds
     * @return
     */
    int saveUserRole(Long userId, List<Long> roleIds);

4.3 UserMapper.xml

    <insert id="saveUserRole">
        insert into sys_user_role(user_id,role_id) values
        <foreach collection="roleIds" item="item" index="index" separator=",">
            (#{userId},#{item})
        </foreach>
    </insert>

4.4 UserService

   /**
     * 分配角色
     * @param userId
     * @param roleIds
     * @return
     */
    boolean saveUserRole(Long userId, List<Long> roleIds);

4.5 UserServiceImpl

    /**
     * 分配角色
     *
     * @param userId
     * @param roleIds
     * @return
     */
    @Override
    @Transactional(rollbackFor = RuntimeException.class)
    public boolean saveUserRole(Long userId, List<Long> roleIds) {
        //删除该用户对应的角色信息
        baseMapper.deleteUserRole(userId);
        //保存用户角色信息
        return baseMapper.saveUserRole(userId,roleIds)>0;
    }

4.6 UserController


    /**
     * 分配角色
     * @param userRoleDTO
     * @return
     */
    @PostMapping("/saveUserRole")
    @PreAuthorize("hasAuthority('sys:user:assign')")
    public Result saveUserRole(@RequestBody UserRoleDTO userRoleDTO){
        if (userService.saveUserRole(userRoleDTO.getUserId(),
                userRoleDTO.getRoleIds())) {
            return Result.ok().message("角色分配成功");
        }
        return Result.error().message("角色分配失败");
    }

5、分配角色前端实现

5.1 前端API脚本

5.2 分配角色窗口确认事件

/**
    * 当点击多选框时触发该事件
    */
    handleSelectionChange(rows){
      // let roleIds = [];
      // //循环遍历选中的角色ID
      // for (let i = 0; i < rows.length; i++) {
      //   //将当前选中的角色ID放到数组中
      //   roleIds.push(rows[i].id);
      // }
      // //将选中的角色ID交给成员变量
      // this.selectedIds = roleIds;
      this.selectedIds = rows.map(item => item.id);//等同于上述代码
    }
/**
    * 分配角色确认事件
    */
    async onAssignConfirm(){
      //判断用户是否有选中角色
      if (this.selectedIds.length === 0) {
        this.$message.warning("请选择要分配的角色!");
        return;
      }
      let params = {
        userId: this.selectedUserId,
        roleIds: this.selectedIds,
      };
      //发送请求
      let res = await userApi.assignRoleSave(params);
      //判断是否成功
      if (res.success) {
        this.$message.success(res.message);
        //关闭窗口
        this.assignDialog.visible = false;
      } else {
        this.$message.error(res.message);
      }
    },

文章来源:https://blog.csdn.net/shieryue_2016/article/details/135248178
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。