diff --git a/model/src/main/java/com/atguigu/ssyx/vo/acl/AssignAdminRoleVo.java b/model/src/main/java/com/atguigu/ssyx/vo/acl/AssignAdminRoleVo.java new file mode 100644 index 0000000..d8939b8 --- /dev/null +++ b/model/src/main/java/com/atguigu/ssyx/vo/acl/AssignAdminRoleVo.java @@ -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 assignRoles; + + @ApiModelProperty(value = "所有角色数据") + private List allRolesList; +} diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/ServiceAclApplication.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/ServiceAclApplication.java index 3154812..878caaa 100644 --- a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/ServiceAclApplication.java +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/ServiceAclApplication.java @@ -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); diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/controller/AdminRoleController.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/controller/AdminRoleController.java new file mode 100644 index 0000000..c6277b7 --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/controller/AdminRoleController.java @@ -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 toAssign(@PathVariable Long adminId) { + AssignAdminRoleVo vo = adminRoleService.findRoleByUserId(adminId); + return Result.success(vo); + } + + @ApiOperation(value = "根据用户分配角色") + @PostMapping("/doAssign") + public Result doAssign(@RequestParam Long adminId, @RequestParam Long[] roleId) { + adminRoleService.saveUserRoleShip(adminId, roleId); + return Result.success(); + } +} diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/mapper/AdminRoleMapper.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/mapper/AdminRoleMapper.java new file mode 100644 index 0000000..da34f49 --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/mapper/AdminRoleMapper.java @@ -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 { + /** + * * 根据用户ID查找角色 + * + * @param adminId 用户ID + * @return 角色列表 + */ + List findRoleByUserId(Long adminId); +} diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/AdminRoleService.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/AdminRoleService.java new file mode 100644 index 0000000..dfbc256 --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/AdminRoleService.java @@ -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 { + /** + * * 根据用户获取角色数据 + * + * @param adminId 用户ID + * @return 分配集合 + */ + AssignAdminRoleVo findRoleByUserId(Long adminId); + + /** + * * 根据用户分配角色 + * + * @param adminId 用户ID + * @param roleId 角色ID + */ + void saveUserRoleShip(Long adminId, Long[] roleId); +} diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/RoleService.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/RoleService.java index deacfb8..efa866f 100644 --- a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/RoleService.java +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/RoleService.java @@ -6,6 +6,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; public interface RoleService extends IService { - // 获取角色分页列表 + /** + * * 获取角色分页列表 + * + * @param page 当前页码 + * @param limit 每页记录数 + * @param vo 角色查询实体 + * @return 分页结果 + */ IPage selectPage(Long page, Long limit, RoleQueryVo vo); } diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/AdminRoleServiceImpl.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/AdminRoleServiceImpl.java new file mode 100644 index 0000000..bb6418f --- /dev/null +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/AdminRoleServiceImpl.java @@ -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 implements AdminRoleService { + @Autowired + private RoleService roleService; + + /** + * 根据用户获取角色数据 + * + * @param adminId 用户ID + * @return 分配集合 + */ + @Override + public AssignAdminRoleVo findRoleByUserId(Long adminId) { + // 查询所有的角色 + List allRolesList = roleService.list(null); + List 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.lambdaQuery().eq(AdminRole::getAdminId, adminId)); + ArrayList adminRoles = new ArrayList<>(); + + // 循环遍历并插入 + for (Long roleId : roleIds) { + AdminRole adminRole = new AdminRole(); + adminRole.setAdminId(adminId); + adminRole.setRoleId(roleId); + adminRoles.add(adminRole); + } + + // 插入整体数据 + saveBatch(adminRoles); + } +} diff --git a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/RoleServiceImpl.java b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/RoleServiceImpl.java index ba0052c..b93e32d 100644 --- a/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/RoleServiceImpl.java +++ b/service/service-acl/src/main/java/com/atguigu/ssyx/acl/service/impl/RoleServiceImpl.java @@ -15,6 +15,14 @@ import org.springframework.stereotype.Service; @Service @Slf4j public class RoleServiceImpl extends ServiceImpl implements RoleService { + /** + * 获取角色分页列表 + * + * @param page 当前页码 + * @param limit 每页记录数 + * @param vo 角色查询实体 + * @return 分页结果 + */ @Override public IPage selectPage(Long page, Long limit, RoleQueryVo vo) { Page roleParam = new Page<>(page, limit); diff --git a/service/service-acl/src/main/resources/mapper/AdminRoleMapper.xml b/service/service-acl/src/main/resources/mapper/AdminRoleMapper.xml new file mode 100644 index 0000000..b8f52fe --- /dev/null +++ b/service/service-acl/src/main/resources/mapper/AdminRoleMapper.xml @@ -0,0 +1,12 @@ + + + + + +