feat(新增): 根据用户获取角色数据和根据用户分配角色

This commit is contained in:
bunny 2024-04-02 13:17:45 +08:00
parent 1b22f6dca0
commit 5139c4459f
9 changed files with 186 additions and 1 deletions

View File

@ -0,0 +1,24 @@
package com.atguigu.ssyx.vo.acl;
import com.atguigu.ssyx.model.acl.Role;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "所有角色数据")
public class AssignAdminRoleVo {
@ApiModelProperty(value = "角色列表数据")
private List<Role> assignRoles;
@ApiModelProperty(value = "所有角色数据")
private List<Role> allRolesList;
}

View File

@ -3,9 +3,11 @@ package com.atguigu.ssyx.acl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@ComponentScan(basePackages = {"com.atguigu.ssyx", "com.atguigu.ssyx.acl"})
@EnableTransactionManagement
public class ServiceAclApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceAclApplication.class, args);

View File

@ -0,0 +1,31 @@
package com.atguigu.ssyx.acl.controller;
import com.atguigu.ssyx.acl.service.AdminRoleService;
import com.atguigu.ssyx.common.result.Result;
import com.atguigu.ssyx.vo.acl.AssignAdminRoleVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/admin/acl/user")
@Api(tags = "用户和角色管理")
public class AdminRoleController {
@Autowired
private AdminRoleService adminRoleService;
@ApiOperation(value = "根据用户获取角色数据")
@GetMapping("/toAssign/{adminId}")
public Result<AssignAdminRoleVo> toAssign(@PathVariable Long adminId) {
AssignAdminRoleVo vo = adminRoleService.findRoleByUserId(adminId);
return Result.success(vo);
}
@ApiOperation(value = "根据用户分配角色")
@PostMapping("/doAssign")
public Result<String> doAssign(@RequestParam Long adminId, @RequestParam Long[] roleId) {
adminRoleService.saveUserRoleShip(adminId, roleId);
return Result.success();
}
}

View File

@ -0,0 +1,17 @@
package com.atguigu.ssyx.acl.mapper;
import com.atguigu.ssyx.model.acl.AdminRole;
import com.atguigu.ssyx.model.acl.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public interface AdminRoleMapper extends BaseMapper<AdminRole> {
/**
* * 根据用户ID查找角色
*
* @param adminId 用户ID
* @return 角色列表
*/
List<Role> findRoleByUserId(Long adminId);
}

View File

@ -0,0 +1,23 @@
package com.atguigu.ssyx.acl.service;
import com.atguigu.ssyx.model.acl.AdminRole;
import com.atguigu.ssyx.vo.acl.AssignAdminRoleVo;
import com.baomidou.mybatisplus.extension.service.IService;
public interface AdminRoleService extends IService<AdminRole> {
/**
* * 根据用户获取角色数据
*
* @param adminId 用户ID
* @return 分配集合
*/
AssignAdminRoleVo findRoleByUserId(Long adminId);
/**
* * 根据用户分配角色
*
* @param adminId 用户ID
* @param roleId 角色ID
*/
void saveUserRoleShip(Long adminId, Long[] roleId);
}

View File

@ -6,6 +6,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
public interface RoleService extends IService<Role> {
// 获取角色分页列表
/**
* * 获取角色分页列表
*
* @param page 当前页码
* @param limit 每页记录数
* @param vo 角色查询实体
* @return 分页结果
*/
IPage<Role> selectPage(Long page, Long limit, RoleQueryVo vo);
}

View File

@ -0,0 +1,61 @@
package com.atguigu.ssyx.acl.service.impl;
import com.atguigu.ssyx.acl.mapper.AdminRoleMapper;
import com.atguigu.ssyx.acl.service.AdminRoleService;
import com.atguigu.ssyx.acl.service.RoleService;
import com.atguigu.ssyx.model.acl.AdminRole;
import com.atguigu.ssyx.model.acl.Role;
import com.atguigu.ssyx.vo.acl.AssignAdminRoleVo;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole> implements AdminRoleService {
@Autowired
private RoleService roleService;
/**
* 根据用户获取角色数据
*
* @param adminId 用户ID
* @return 分配集合
*/
@Override
public AssignAdminRoleVo findRoleByUserId(Long adminId) {
// 查询所有的角色
List<Role> allRolesList = roleService.list(null);
List<Role> roleList = baseMapper.findRoleByUserId(adminId);
return AssignAdminRoleVo.builder().assignRoles(roleList).allRolesList(allRolesList).build();
}
/**
* * 根据用户分配角色
*
* @param adminId 用户ID
* @param roleIds 角色ID
*/
@Override
@Transactional
public void saveUserRoleShip(Long adminId, Long[] roleIds) {
remove(Wrappers.<AdminRole>lambdaQuery().eq(AdminRole::getAdminId, adminId));
ArrayList<AdminRole> adminRoles = new ArrayList<>();
// 循环遍历并插入
for (Long roleId : roleIds) {
AdminRole adminRole = new AdminRole();
adminRole.setAdminId(adminId);
adminRole.setRoleId(roleId);
adminRoles.add(adminRole);
}
// 插入整体数据
saveBatch(adminRoles);
}
}

View File

@ -15,6 +15,14 @@ import org.springframework.stereotype.Service;
@Service
@Slf4j
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {
/**
* 获取角色分页列表
*
* @param page 当前页码
* @param limit 每页记录数
* @param vo 角色查询实体
* @return 分页结果
*/
@Override
public IPage<Role> selectPage(Long page, Long limit, RoleQueryVo vo) {
Page<Role> roleParam = new Page<>(page, limit);

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.atguigu.ssyx.acl.mapper.AdminRoleMapper">
<!-- 根据用户ID查找角色 -->
<select id="findRoleByUserId" resultType="com.atguigu.ssyx.model.acl.Role">
SELECT r.*
FROM admin_role ar
LEFT JOIN role r ON ar.role_id = r.id AND ar.admin_id = #{adminId}
WHERE ar.is_deleted = 0
AND r.is_deleted = 0
</select>
</mapper>