权限模块开发+权限与角色关联(完整CRUD)

news2024/11/16 22:49:20

文章目录

  • 🌞 Sun Frame:SpringBoot 的轻量级开发框架(个人开源项目推荐)
    • 🌟 亮点功能
    • 📦 spring cloud模块概览
      • 常用工具
    • 🔗 更多信息
    • 1.easycode生成代码
        • 1.配置
        • 2.AuthPermissionDao.java剪切到mapper
        • 3.AuthPermission.java使用lombok优化
        • 4.AuthPermissionDao.java 删除Pageable
        • 5.AuthPermissionDao.xml 全局替换为空
        • 6.AuthPermissionService.java 删除分页查询接口
        • 7.AuthPermissionServiceImpl.java 删除分页查询实现类
    • 2.编写DTO和BO
        • 1.sun-club-auth-application-controller
          • 1.AuthPermissionDTO.java
          • 2.AuthPermissionDTOConverter.java
        • 2.sun-club-auth-domain
          • 1.AuthPermissionBO.java
          • 2.AuthPermissionBOConverter.java
    • 3.新增权限
        • 1.PermissionController.java
        • 2.sun-club-auth-domain
          • 1.AuthPermissionDomainService.java
          • 2.AuthPermissionDomainServiceImpl.java
        • 3.sun-club-auth-infra
          • 1.AuthPermissionService.java
          • 2.AuthPermissionServiceImpl.java
        • 4.测试
          • 1.接口设计
          • 2.测试
    • 4.更新权限
        • 1.PermissionController.java
        • 2.sun-club-auth-domain
          • 1.AuthPermissionDomainService.java
          • 2.AuthPermissionDomainServiceImpl.java
        • 3.sun-club-auth-infra
          • 1.AuthPermissionService.java
          • 2.AuthPermissionServiceImpl.java
          • 3.AuthPermissionDao.xml 注意show是关键字
        • 4.测试
          • 1.接口设计
          • 2.测试
    • 5.删除权限
        • 1.PermissionController.java
        • 2.AuthPermissionDomainService.java
        • 3.AuthPermissionDomainServiceImpl.java
        • 4.测试
          • 1.接口设计
          • 2.测试
    • 6.权限与角色关联
        • 1.easycode生成代码
          • 1.配置
          • 2.dao层AuthRolePermissionDao.java的移动到mapper层
          • 3.AuthRolePermission.java 使用lombok优化
          • 4.AuthRolePermissionDao.java 删除Pageable
          • 5.AuthRolePermissionDao.xml 全局替换掉, INTEGER之类的
          • 6.AuthRolePermissionService.java 删除分页查询接口
          • 7.AuthRolePermissionServiceImpl.java 删除分页查询实现类
        • 2.编写DTO和BO
          • 1.sun-club-auth-application-controller
            • 1.AuthRolePermissionDTO.java
            • 2.AuthRolePermissionDTOConverter.java
          • 2.sun-club-auth-domain
            • 1.AuthRolePermissionBO.java
            • 2.AuthRolePermissionBOConverter.java
        • 3.sun-club-auth-application-controller
          • 1.AuthRolePermissionDTO.java 新增permissionIdList字段
          • 2.RolePermissionController.java
        • 4.sun-club-auth-domain
          • 1.AuthRolePermissionDomainService.java
          • 2.AuthRolePermissionDomainServiceImpl.java
          • 3.AuthRolePermissionBO.java 保持跟DTO一致
        • 5.sun-club-auth-infra
          • 1.AuthRolePermissionService.java
          • 2.AuthRolePermissionServiceImpl.java
        • 6.测试
          • 1.接口设计
          • 2.测试

🌞 Sun Frame:SpringBoot 的轻量级开发框架(个人开源项目推荐)

Sun Frame Banner

轻松高效的现代化开发体验

Sun Frame 是我个人开源的一款基于 SpringBoot 的轻量级框架,专为中小型企业设计。它提供了一种快速、简单且易于扩展的开发方式。

我们的开发文档记录了整个项目从0到1的任何细节,实属不易,请给我们一个Star!🌟
您的支持是我们持续改进的动力。

🌟 亮点功能

  • 组件化开发:灵活选择,简化流程。
  • 高性能:通过异步日志和 Redis 缓存提升性能。
  • 易扩展:支持多种数据库和消息队列。

📦 spring cloud模块概览

  • Nacos 服务:高效的服务注册与发现。
  • Feign 远程调用:简化服务间通信。
  • 强大网关:路由与限流。

常用工具

  • 日志管理:异步处理与链路追踪。
  • Redis 集成:支持分布式锁与缓存。
  • Swagger 文档:便捷的 API 入口。
  • 测试支持:SpringBoot-Test 集成。
  • EasyCode:自定义EasyCode模板引擎,一键生成CRUD。

🔗 更多信息

  • 开源地址:Gitee Sun Frame
  • 详细文档:语雀文档
    在这里插入图片描述

1.easycode生成代码

1.配置

image-20240606171545969

2.AuthPermissionDao.java剪切到mapper

image-20240606171805496

3.AuthPermission.java使用lombok优化

image-20240606171938091

4.AuthPermissionDao.java 删除Pageable

image-20240606171830556

5.AuthPermissionDao.xml 全局替换为空
, VARCHAR
, INTEGER
, TIMESTAMP

image-20240606172109479

image-20240606172203067

6.AuthPermissionService.java 删除分页查询接口
7.AuthPermissionServiceImpl.java 删除分页查询实现类

2.编写DTO和BO

1.sun-club-auth-application-controller
1.AuthPermissionDTO.java
package com.sunxiansheng.auth.application.dto;

import lombok.Data;

import java.io.Serializable;

/**
 * (AuthPermission)dto
 *
 * @author makejava
 * @since 2024-06-06 17:16:58
 */
@Data
public class AuthPermissionDTO implements Serializable {

    private Long id;
    /**
     * 权限名称
     */
    private String name;
    /**
     * 父id
     */
    private Long parentId;
    /**
     * 权限类型 0菜单 1操作
     */
    private Integer type;
    /**
     * 菜单路由
     */
    private String menuUrl;
    /**
     * 状态 0启用 1禁用
     */
    private Integer status;
    /**
     * 展示状态 0展示 1隐藏
     */
    private Integer show;
    /**
     * 图标
     */
    private String icon;
    /**
     * 权限唯一标识
     */
    private String permissionKey;
    /**
     * 是否被删除 0为删除 1已删除
     */
    private Integer isDeleted;

}
2.AuthPermissionDTOConverter.java
package com.sunxiansheng.auth.application.convert;

import com.sunxiansheng.auth.application.dto.AuthPermissionDTO;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * Description: DTO转换
 * @Author sun
 * @Create 2024/6/5 15:39
 * @Version 1.0
 */
@Mapper
public interface AuthPermissionDTOConverter {
    AuthPermissionDTOConverter INSTANCE = Mappers.getMapper(AuthPermissionDTOConverter.class);

    // 将DTO转换为BO
    AuthPermissionBO convertDTO2BO(AuthPermissionDTO authPermissionDTO);
    // 将BO转换为DTO
    AuthPermissionDTO convertBO2DTO(AuthPermissionBO authPermissionBO);
    // 将DTO集合转换为BO集合
    List<AuthPermissionBO> convertDTO2BO(List<AuthPermissionDTO> authPermissionDTOList);
    // 将BO集合转换为DTO集合
    List<AuthPermissionDTO> convertBO2DTO(List<AuthPermissionBO> authPermissionBOList);

}
2.sun-club-auth-domain
1.AuthPermissionBO.java
package com.sunxiansheng.auth.domain.entity;

import lombok.Data;

import java.io.Serializable;

/**
 * (AuthPermission)bo
 *
 * @author makejava
 * @since 2024-06-06 17:16:58
 */
@Data
public class AuthPermissionBO implements Serializable {

    private Long id;
    /**
     * 权限名称
     */
    private String name;
    /**
     * 父id
     */
    private Long parentId;
    /**
     * 权限类型 0菜单 1操作
     */
    private Integer type;
    /**
     * 菜单路由
     */
    private String menuUrl;
    /**
     * 状态 0启用 1禁用
     */
    private Integer status;
    /**
     * 展示状态 0展示 1隐藏
     */
    private Integer show;
    /**
     * 图标
     */
    private String icon;
    /**
     * 权限唯一标识
     */
    private String permissionKey;
    /**
     * 是否被删除 0为删除 1已删除
     */
    private Integer isDeleted;

}
2.AuthPermissionBOConverter.java
package com.sunxiansheng.auth.domain.convert;

import com.sunxiansheng.auth.basic.entity.AuthPermission;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * Description: BO转换
 * @Author sun
 * @Create 2024/5/24 9:18
 * @Version 1.0
 */
@Mapper // mapstruct的注解
public interface AuthPermissionBOConverter {

    AuthPermissionBOConverter INSTANCE = Mappers.getMapper(AuthPermissionBOConverter.class);

    // 将BO转换为Entity
    AuthPermission convertBO2Entity(AuthPermissionBO authPermissionBO);
    // 将Entity转换为BO
    AuthPermissionBO convertEntity2BO(AuthPermission authPermission);
    // 将BO集合转换为Entity集合
    List<AuthPermission> convertBO2Entity(List<AuthPermissionBO> authPermissionBOList);
    // 将Entity集合转换为BO集合
    List<AuthPermissionBO> convertEntity2BO(List<AuthPermission> authPermissionList);

}

3.新增权限

1.PermissionController.java
package com.sunxiansheng.auth.application.controller;

import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.sunxiansheng.auth.application.convert.AuthPermissionDTOConverter;
import com.sunxiansheng.auth.application.dto.AuthPermissionDTO;
import com.sunxiansheng.auth.common.eneity.Result;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import com.sunxiansheng.auth.domain.service.AuthPermissionDomainService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * Description:
 * @Author sun
 * @Create 2024/6/2 17:25
 * @Version 1.0
 */
@RestController
@RequestMapping("/permission/")
@Slf4j
public class PermissionController {

    @Resource
    private AuthPermissionDomainService authPermissionDomainService;

    /**
     * 新增权限信息
     * @param authPermissionDTO
     * @return
     */
    @RequestMapping("add")
    public Result<Boolean> add(@RequestBody AuthPermissionDTO authPermissionDTO) {
        try {
            // 日志
            if (log.isInfoEnabled()) {
                log.info("PermissionController add AuthPermissionDTO, authPermissionDTO:{}", JSON.toJSONString(authPermissionDTO));
            }
            // 参数校验
            Preconditions.checkArgument(!StringUtils.isBlank(authPermissionDTO.getName()), "权限名称不能为空");
            Preconditions.checkNotNull(authPermissionDTO.getParentId(), "父ID不能为空");
            // 转换DTO为BO
            AuthPermissionBO authPermissionBO = AuthPermissionDTOConverter.INSTANCE.convertDTO2BO(authPermissionDTO);
            // 调用领域服务
            // 新增权限信息
            Boolean res = authPermissionDomainService.add(authPermissionBO);
            return Result.ok(res);
        } catch (Exception e) {
            // error日志
            log.error("PermissionController add error:{}", e.getMessage(), e);
            return Result.fail("新增权限信息失败");
        }
    }

}
2.sun-club-auth-domain
1.AuthPermissionDomainService.java
package com.sunxiansheng.auth.domain.service;


import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;

/**
 * Description:
 * @Author sun
 * @Create 2024/5/24 9:03
 * @Version 1.0
 */
public interface AuthPermissionDomainService {

    /**
     * 添加
     * @param authPermissionBO
     * @return
     */
    Boolean add(AuthPermissionBO authPermissionBO);
}
2.AuthPermissionDomainServiceImpl.java
package com.sunxiansheng.auth.domain.service.impl;


import com.sunxiansheng.auth.basic.entity.AuthPermission;
import com.sunxiansheng.auth.basic.entity.AuthRole;
import com.sunxiansheng.auth.basic.service.AuthPermissionService;
import com.sunxiansheng.auth.common.enums.IsDeleteFlagEnum;
import com.sunxiansheng.auth.domain.convert.AuthPermissionBOConverter;
import com.sunxiansheng.auth.domain.convert.AuthRoleBOConverter;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import com.sunxiansheng.auth.domain.service.AuthPermissionDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * Description:
 * @Author sun
 * @Create 2024/5/24 9:03
 * @Version 1.0
 */
@Service
@Slf4j
public class AuthPermissionDomainServiceImpl implements AuthPermissionDomainService {

    @Resource
    private AuthPermissionService authPermissionService;

    @Override
    public Boolean add(AuthPermissionBO authPermissionBO) {
        // BO转换为Entity
        AuthPermission authPermission = AuthPermissionBOConverter.INSTANCE.convertBO2Entity(authPermissionBO);
        // 调用基础服务
        // 设置逻辑删除
        authPermission.setIsDeleted(IsDeleteFlagEnum.UN_DELETED.getCode());
        // 新增角色
        Integer count = authPermissionService.insert(authPermission);
        return count > 0;
    }
}
3.sun-club-auth-infra
1.AuthPermissionService.java
/**
 * 新增数据
 *
 * @param authPermission 实例对象
 * @return 实例对象
 */
Integer insert(AuthPermission authPermission);
2.AuthPermissionServiceImpl.java
/**
 * 新增数据
 *
 * @param authPermission 实例对象
 * @return 实例对象
 */
@Override
public Integer insert(AuthPermission authPermission) {
    return this.authPermissionDao.insert(authPermission);
}
4.测试
1.接口设计

image-20240607134524294

2.测试

image-20240607134537429

image-20240607134552723

4.更新权限

1.PermissionController.java
@RequestMapping("update")
public Result<Boolean> update(@RequestBody AuthPermissionDTO authPermissionDTO) {
    try {
        // 日志
        if (log.isInfoEnabled()) {
            log.info("PermissionController update AuthPermissionDTO, authPermissionDTO:{}", JSON.toJSONString(authPermissionDTO));
        }
        // 参数校验
        Preconditions.checkNotNull(authPermissionDTO.getId(), "权限ID不能为空");
        // 转换DTO为BO
        AuthPermissionBO authPermissionBO = AuthPermissionDTOConverter.INSTANCE.convertDTO2BO(authPermissionDTO);
        // 调用领域服务
        // 修改权限信息
        Boolean res = authPermissionDomainService.update(authPermissionBO);
        return Result.ok(res);
    } catch (Exception e) {
        // error日志
        log.error("PermissionController update error:{}", e.getMessage(), e);
        return Result.fail("修改权限信息失败");
    }
}
2.sun-club-auth-domain
1.AuthPermissionDomainService.java
/**
 * 修改
 * @param authPermissionBO
 * @return
 */
Boolean update(AuthPermissionBO authPermissionBO);
2.AuthPermissionDomainServiceImpl.java
@Override
public Boolean update(AuthPermissionBO authPermissionBO) {
    // BO转换为Entity
    AuthPermission authPermission = AuthPermissionBOConverter.INSTANCE.convertBO2Entity(authPermissionBO);
    // 调用基础服务
    // 修改权限信息
    Integer count = authPermissionService.update(authPermission);
    // 有任何的更新,都要与缓存进行同步的修改,要把当前用户的角色和权限都放到redis里
    return count > 0;
}
3.sun-club-auth-infra
1.AuthPermissionService.java
/**
 * 修改数据
 *
 * @param authPermission 实例对象
 * @return 实例对象
 */
Integer update(AuthPermission authPermission);
2.AuthPermissionServiceImpl.java
/**
 * 修改数据
 *
 * @param authPermission 实例对象
 * @return 实例对象
 */
@Override
public Integer update(AuthPermission authPermission) {
    return this.authPermissionDao.update(authPermission);
}
3.AuthPermissionDao.xml 注意show是关键字

image-20240607135659759

4.测试
1.接口设计

image-20240607135729090

2.测试

image-20240607135757069

image-20240607135814199

5.删除权限

1.PermissionController.java
/**
 * 删除权限信息
 * @param authPermissionDTO
 * @return
 */
@RequestMapping("delete")
public Result<Boolean> delete(@RequestBody AuthPermissionDTO authPermissionDTO) {
    try {
        // 日志
        if (log.isInfoEnabled()) {
            log.info("PermissionController delete AuthPermissionDTO, authPermissionDTO:{}", JSON.toJSONString(authPermissionDTO));
        }
        // 参数校验
        Preconditions.checkNotNull(authPermissionDTO.getId(), "权限ID不能为空");
        // 转换DTO为BO
        AuthPermissionBO authPermissionBO = AuthPermissionDTOConverter.INSTANCE.convertDTO2BO(authPermissionDTO);
        // 调用领域服务
        // 删除权限信息
        Boolean res = authPermissionDomainService.delete(authPermissionBO);
        return Result.ok(res);
    } catch (Exception e) {
        // error日志
        log.error("PermissionController delete error:{}", e.getMessage(), e);
        return Result.fail("删除权限信息失败");
    }
}
2.AuthPermissionDomainService.java
/**
 * 删除
 * @param authPermissionBO
 * @return
 */
Boolean delete(AuthPermissionBO authPermissionBO);
3.AuthPermissionDomainServiceImpl.java
@Override
public Boolean delete(AuthPermissionBO authPermissionBO) {
    // BO转换为Entity
    AuthPermission authPermission = AuthPermissionBOConverter.INSTANCE.convertBO2Entity(authPermissionBO);
    // 设置逻辑删除
    authPermission.setIsDeleted(IsDeleteFlagEnum.DELETED.getCode());
    // 更新
    Integer count = authPermissionService.update(authPermission);
    return count > 0;
}
4.测试
1.接口设计

image-20240607140428992

2.测试

image-20240607140442342

image-20240607140504097

6.权限与角色关联

1.easycode生成代码
1.配置

image-20240607141131511

2.dao层AuthRolePermissionDao.java的移动到mapper层
3.AuthRolePermission.java 使用lombok优化
4.AuthRolePermissionDao.java 删除Pageable
5.AuthRolePermissionDao.xml 全局替换掉, INTEGER之类的
6.AuthRolePermissionService.java 删除分页查询接口
7.AuthRolePermissionServiceImpl.java 删除分页查询实现类
2.编写DTO和BO
1.sun-club-auth-application-controller
1.AuthRolePermissionDTO.java
package com.sunxiansheng.auth.application.dto;

import lombok.Data;

import java.io.Serializable;

/**
 * 角色权限关联表(AuthRolePermission)实体类
 *
 * @author makejava
 * @since 2024-06-07 14:11:29
 */
@Data
public class AuthRolePermissionDTO implements Serializable {

    private Long id;
    /**
     * 角色id
     */
    private Long roleId;
    /**
     * 权限id
     */
    private Long permissionId;

    private Integer isDeleted;

}
2.AuthRolePermissionDTOConverter.java
package com.sunxiansheng.auth.application.convert;

import com.sunxiansheng.auth.application.dto.AuthRolePermissionDTO;
import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * Description: DTO转换
 * @Author sun
 * @Create 2024/6/5 15:39
 * @Version 1.0
 */
@Mapper
public interface AuthRolePermissionDTOConverter {
    AuthRolePermissionDTOConverter INSTANCE = Mappers.getMapper(AuthRolePermissionDTOConverter.class);

    // 将DTO转换为BO
    AuthRolePermissionBO convertDTO2BO(AuthRolePermissionDTO authRolePermissionDTO);
    // 将BO转换为DTO
    AuthRolePermissionDTO convertBO2DTO(AuthRolePermissionBO authRolePermissionBO);
    // 将DTO集合转换为BO集合
    List<AuthRolePermissionBO> convertDTOList2BOList(List<AuthRolePermissionDTO> authRolePermissionDTOList);
    // 将BO集合转换为DTO集合
    List<AuthRolePermissionDTO> convertBOList2DTOList(List<AuthRolePermissionBO> authRolePermissionBOList);

}
2.sun-club-auth-domain
1.AuthRolePermissionBO.java
package com.sunxiansheng.auth.domain.entity;

import lombok.Data;

import java.io.Serializable;

/**
 * 角色权限关联表(AuthRolePermission)实体类
 *
 * @author makejava
 * @since 2024-06-07 14:11:29
 */
@Data
public class AuthRolePermissionBO implements Serializable {

    private Long id;
    /**
     * 角色id
     */
    private Long roleId;
    /**
     * 权限id
     */
    private Long permissionId;

    private Integer isDeleted;

}
2.AuthRolePermissionBOConverter.java
package com.sunxiansheng.auth.domain.convert;

import com.sunxiansheng.auth.basic.entity.AuthRolePermission;
import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * Description: BO转换
 * @Author sun
 * @Create 2024/5/24 9:18
 * @Version 1.0
 */
@Mapper // mapstruct的注解
public interface AuthRolePermissionBOConverter {

    AuthRolePermissionBOConverter INSTANCE = Mappers.getMapper(AuthRolePermissionBOConverter.class);

    // 将BO转换为Entity
    AuthRolePermission convertBO2Entity(AuthRolePermissionBO authRolePermissionBO);
    // 将Entity转换为BO
    AuthRolePermissionBO convertEntity2BO(AuthRolePermission authRolePermission);
    // 将BO集合转换为Entity集合
    List<AuthRolePermission> convertBOList2EntityList(List<AuthRolePermissionBO> authRolePermissionBOList);
    // 将Entity集合转换为BO集合
    List<AuthRolePermissionBO> convertEntityList2BOList(List<AuthRolePermission> authRolePermissionList);

}
3.sun-club-auth-application-controller
1.AuthRolePermissionDTO.java 新增permissionIdList字段
2.RolePermissionController.java
package com.sunxiansheng.auth.application.controller;

import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.sunxiansheng.auth.application.convert.AuthPermissionDTOConverter;
import com.sunxiansheng.auth.application.convert.AuthRolePermissionDTOConverter;
import com.sunxiansheng.auth.application.dto.AuthPermissionDTO;
import com.sunxiansheng.auth.application.dto.AuthRolePermissionDTO;
import com.sunxiansheng.auth.common.eneity.Result;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;
import com.sunxiansheng.auth.domain.service.AuthRolePermissionDomainService;
import com.sunxiansheng.auth.domain.service.impl.AuthRolePermissionDomainServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * Description:
 * @Author sun
 * @Create 2024/6/2 17:25
 * @Version 1.0
 */
@RestController
@RequestMapping("/rolePermission/")
@Slf4j
public class RolePermissionController {

    @Resource
    private AuthRolePermissionDomainService authRolePermissionDomainService;

    /**
     * 新增角色权限信息
     * @param authRolePermissionDTO
     * @return
     */
    @RequestMapping("add")
    public Result<Boolean> add(@RequestBody AuthRolePermissionDTO authRolePermissionDTO) {
        try {
            // 日志
            if (log.isInfoEnabled()) {
                log.info("RolePermissionController add AuthRolePermissionDTO, authRolePermissionDTO:{}", JSON.toJSONString(authRolePermissionDTO));
            }
            // 参数校验
            Preconditions.checkArgument(!CollectionUtils.isEmpty(authRolePermissionDTO.getPermissionIdList()), "权限ID列表不能为空");
            Preconditions.checkNotNull(authRolePermissionDTO.getRoleId(), "角色ID不能为空");
            // 转换DTO为BO
            AuthRolePermissionBO authRolePermissionBO = AuthRolePermissionDTOConverter.INSTANCE.convertDTO2BO(authRolePermissionDTO);
            // 调用领域服务
            // 新增权限信息
            Boolean res = authRolePermissionDomainService.add(authRolePermissionBO);
            return Result.ok(res);
        } catch (Exception e) {
            // error日志
            log.error("RolePermissionController add error:{}", e.getMessage(), e);
            return Result.fail("新增角色权限信息失败");
        }
    }

}
4.sun-club-auth-domain
1.AuthRolePermissionDomainService.java
package com.sunxiansheng.auth.domain.service;


import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;

/**
 * Description:
 * @Author sun
 * @Create 2024/5/24 9:03
 * @Version 1.0
 */
public interface AuthRolePermissionDomainService {
    /**
     * 添加
     * @param authRolePermissionBO
     * @return
     */
    Boolean add(AuthRolePermissionBO authRolePermissionBO);
}
2.AuthRolePermissionDomainServiceImpl.java
package com.sunxiansheng.auth.domain.service.impl;


import com.sunxiansheng.auth.basic.entity.AuthRolePermission;
import com.sunxiansheng.auth.basic.service.AuthRolePermissionService;
import com.sunxiansheng.auth.common.enums.IsDeleteFlagEnum;
import com.sunxiansheng.auth.domain.convert.AuthRolePermissionBOConverter;
import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;
import com.sunxiansheng.auth.domain.service.AuthRolePermissionDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Description:
 * @Author sun
 * @Create 2024/5/24 9:03
 * @Version 1.0
 */
@Service
@Slf4j
public class AuthRolePermissionDomainServiceImpl implements AuthRolePermissionDomainService {

    @Resource
    private AuthRolePermissionService authRolePermissionService;

    @Override
    public Boolean add(AuthRolePermissionBO authRolePermissionBO) {
        // BO转换为Entity
        AuthRolePermission authRolePermission = AuthRolePermissionBOConverter.INSTANCE.convertBO2Entity(authRolePermissionBO);
        // 得到roleId
        Long roleId = authRolePermission.getRoleId();
        // 构建一个批量插入的列表
        List<AuthRolePermission> entities = authRolePermissionBO.getPermissionIdList().stream().map(
                permissionId -> {
                    // 每一个permissionId都构建一个entity
                    AuthRolePermission authRolePermission1 = new AuthRolePermission();
                    authRolePermission1.setRoleId(roleId);
                    authRolePermission1.setPermissionId(permissionId);
                    authRolePermission1.setIsDeleted(IsDeleteFlagEnum.UN_DELETED.getCode());
                    return authRolePermission1;
                }
        ).collect(Collectors.toList());
        // 批量插入
        int count = authRolePermissionService.insertBatch(entities);
        return count > 0;
    }
}
3.AuthRolePermissionBO.java 保持跟DTO一致

image-20240607150128258

5.sun-club-auth-infra
1.AuthRolePermissionService.java
/**
 * 批量新增数据(MyBatis原生foreach方法)
 * @param entities
 * @return
 */
public int insertBatch(List<AuthRolePermission> entities);
2.AuthRolePermissionServiceImpl.java
/**
 * 批量新增数据(MyBatis原生foreach方法)
 *
 * @param entities List<AuthRolePermission> 实例对象列表
 * @return 影响行数
 */
public int insertBatch(List<AuthRolePermission> entities) {
    return authRolePermissionDao.insertBatch(entities);
}
6.测试
1.接口设计

image-20240607150308702

2.测试

image-20240607150323356

image-20240607150332449

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SharpLab:.Net反编译工具,方便实时查看反编译后的代码!

C#提供了很多高级语法&#xff0c;很多都是语法糖。这些语法糖对于初学者来说&#xff0c;很多无法理解。 下面推荐一个开源项目&#xff0c;它能够让我们&#xff0c;实时查看编译过程、生成的中间语言&#xff08;IL&#xff09;以及反编译后的代码。 01 项目简介 SharpLa…

C语言 ——深入理解指针(2)

目录 1. 数组名的理解2. 二级指针3. 指针数组4. 字符指针变量5. 数组指针变量6. 函数指针变量7. 函数指针数组 1. 数组名的理解 这里我们使用 &arr[0] 的方式拿到了数组第一个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;而且是数组首元素的地址&#x…

TabLayout使用以及自定义tab标签

<?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tool…

YoloV10 论文翻译(Real-Time End-to-End Object Detection)

​摘要 近年来&#xff0c;YOLO因其在计算成本与检测性能之间实现了有效平衡&#xff0c;已成为实时目标检测领域的主流范式。研究人员对YOLO的架构设计、优化目标、数据增强策略等方面进行了探索&#xff0c;并取得了显著进展。然而&#xff0c;YOLO对非极大值抑制&#xff0…

01【功能项目】之【主角射线点击导航】

首先创建一个Unity3D的项目 打开资源商店添加一个人物模型 选择一个免费资源主角添加至项目中 在unity中打开后点击下载包 点击导入包 导入成功后会出现在资源包Assets下 右键创建地面 设置地面尺寸 创建一个材料方便给地面调配颜色 选择材料的颜色 将材质拖拽给地面组为组件 将…

double类型 精度丢失的问题

前言 精度丢失的问题是在其他计算机语言中也都会出现&#xff0c;float和double类型的数据在执行二进制浮点运算的时候&#xff0c;并没有提供完全精确的结果。产生误差不在于数的大小&#xff0c;而是因为数的精度。 一、double进行运算时,经常出现精度丢失 0.10.2使用计算…

QTableView使用示例-Qt模型视图代理(Model-View-Delegate)使用示例

模型视图委托&#xff08;MVD&#xff09;是Qt中特有的设计模式&#xff0c;类似MVC设计模式&#xff0c;将MVC设计模式中的Controller当做MVD中的Delegate&#xff0c;两者的概念基本相同。不同的是委托不是独立存在&#xff0c;而是包含在视图里面。 模型视图委托设计模式中&…

#71结构体案例2(三国游戏,冒泡排序)

效果&#xff1a; 代码&#xff1a; #include <iostream> #include <string> using namespace std;//英雄结构体 struct Hero {string name;int age;string gender; };//冒泡排序 void bubbleSort(struct Hero hArray[],int len) {for(int i0;i<len-1;i){for(i…

CentOS 8 本地创建yum源

1.获取iso (有iso就可以建立本地repo) 如CentOS-8.5.2111-aarch64-dvd1.iso 2.解压iso&#xff08;mount挂载就可以吧iso解压到linux某一目录中&#xff09; mkdir /mnt/cdrom mount -o loop ./CentOS-Stream-8-aarch64-20220913-dvd1.iso /mnt/cdrom ls /mnt/cdrom 3.编…

奇偶函数的性质及运算

目录 定义 注意 特征 运算 拓展 定义 设函数f(x)的定义域D&#xff1b; 如果对于函数定义域D内的任意一个x&#xff0c;都有f(-x)&#xff0d;f&#xff08;x&#xff09;&#xff0c;那么函数f&#xff08;x&#xff09;就叫做奇函数。如果对于函数定义域D内的任意一个x…

【前端】 如何在 Vue.js 中使用 Mock 数据:教程与技巧

如何在 Vue.js 中使用 Mock 数据&#xff1a;教程与技巧 在开发过程中&#xff0c;为了测试和开发前端功能&#xff0c;你常常需要用到模拟&#xff08;mock&#xff09;数据。Vue.js 提供了灵活的方式来处理数据请求和更新&#xff0c;但在没有真实后端的情况下&#xff0c;我…

在 VueJS 中使用事件委托处理点击事件(事件委托,vue事件委托,什么是事件委托,什么是vue的事件委托)

前言 在开发 Vue 项目时&#xff0c;我们经常需要处理大量的点击事件。为每个可点击的元素单独添加事件监听器不仅会增加代码的复杂度&#xff0c;还会降低性能。事件委托是一种有效的优化方式&#xff0c;它可以显著减少事件监听器的数量&#xff0c;提高代码的可维护性和执行…

SSM禾泽校园学生商品交易平台-计算机毕设定制-附项目源码(可白嫖)50284

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对禾泽校园学生商品交易平台等问题&#xff0…

部署PXE

一 准备工作 1.rhel7主机 2.开启主机图形init 5 开图形 3.配置网络可用 4.关闭vmware dhcp功能 将VMnet8本地DHCP服务关闭 二 部署kickstart 1.安装kichstart并开启 2.安装httpd并启动 3.测试 4.配置kickstart 左上角文件保存 在vim ks.cfg中配置软件 共享 测试 四 DHCP 1.…

mysql操作(进阶)

1.数据库约束 数据库自动对数据的合法性进行校验检查的一系列机制&#xff0c;目的是为了保证数据库中能够避免被插入或者修改一些非法数据。 &#xff08;1&#xff09;mysql中提供了以下的约束&#xff1a; a.NOT NULL&#xff1a;指定某列不能为null b.UNIQUE&#xff1…

防火墙工具iptables应用详解

文章目录 前言一、Netfilter内核二、Netfilter与iptables的关系三、iptables的表与链四、iptables的常用命令与参数五、 iptables使用案例 前言 iptables是Linux系统中一款强大的防火墙工具&#xff0c;它基于Netfilter内核模块&#xff0c;允许管理员定义数据包的转发、过滤和…

RabbitMQ中如何防止消息堆积的情况发生?

RabbitMQ中如何防止消息堆积的情况发生&#xff1f; 消息堆积是消息队列系统中常见的问题&#xff0c;尤其是在高负载环境下。RabbitMQ作为一个流行的消息代理系统&#xff0c;也不可避免地会遇到这种情况。为了防止消息堆积&#xff0c;我们可以采取以下几种方法&#xff1a;…

基于node.js中国传统节日介绍网站32006-计算机毕业设计项目选题推荐(附源码)

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;中国传统节日介绍网站当然也不能排除在外。中国传统节日介绍网站是以实际运用为开发背景&#xff0c;运用软件工程原理和…

Ubuntu22.04系统下,图像修复项目CodeFormer的部署——点动科技

Ubuntu22.04系统下&#xff0c;图像修复项目CodeFormer的部署——点动科技 一、前言&#xff1a;二、开始2.1 ubuntu和docker基本环境配置1.更新包列表&#xff1a;2. 安装docker依赖3. 添加docker密钥4.添加阿里云docker软件源5.安装docker6.安装完成docker测试7. docker配置国…

windows11远程桌面如何打开

随着远程办公的普及&#xff0c;选择合适的远程桌面工具变得尤为重要。在Windows 11上&#xff0c;用户可以利用系统自带的远程桌面功能&#xff0c;或选择更专业的第三方解决方案&#xff0c;如Splashtop。本文将详细介绍如何在Windows 11上启用远程桌面&#xff0c;并对比Win…