diff --git a/src/main/java/xyz/playedu/api/controller/backend/AdminRoleController.java b/src/main/java/xyz/playedu/api/controller/backend/AdminRoleController.java index ea39a29..64c9d28 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/AdminRoleController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/AdminRoleController.java @@ -8,17 +8,13 @@ import xyz.playedu.api.constant.BPermissionConstant; import xyz.playedu.api.constant.BackendConstant; import xyz.playedu.api.domain.AdminPermission; import xyz.playedu.api.domain.AdminRole; -import xyz.playedu.api.domain.AdminRolePermission; +import xyz.playedu.api.exception.NotFoundException; import xyz.playedu.api.middleware.BackendPermissionMiddleware; import xyz.playedu.api.request.backend.AdminRoleRequest; import xyz.playedu.api.service.AdminPermissionService; -import xyz.playedu.api.service.AdminRolePermissionService; import xyz.playedu.api.service.AdminRoleService; import xyz.playedu.api.types.JsonResponse; -import xyz.playedu.api.util.HelperUtil; -import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.List; @@ -36,9 +32,6 @@ public class AdminRoleController { @Autowired private AdminPermissionService permissionService; - @Autowired - private AdminRolePermissionService rolePermissionService; - @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @GetMapping("/index") public JsonResponse index() { @@ -57,91 +50,41 @@ public class AdminRoleController { @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @PostMapping("/create") - @Transactional public JsonResponse store(@RequestBody @Validated AdminRoleRequest request) { - AdminRole role = new AdminRole(); - - role.setName(request.getName()); - role.setSlug(HelperUtil.randomString(12)); - role.setCreatedAt(new Date()); - role.setUpdatedAt(new Date()); - - roleService.save(role); - - if (request.getPermissionIds().length > 0) { - List rolePermissions = new ArrayList<>(); - for (int i = 0; i < request.getPermissionIds().length; i++) { - AdminRolePermission rolePermission = new AdminRolePermission(); - rolePermission.setRoleId(role.getId()); - rolePermission.setPermId(request.getPermissionIds()[i]); - rolePermissions.add(rolePermission); - } - rolePermissionService.saveBatch(rolePermissions); - } - + roleService.createWithPermissionIds(request.getName(), request.getPermissionIds()); return JsonResponse.success(); } @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @GetMapping("/{id}") - public JsonResponse edit(@PathVariable(name = "id") Integer id) { - AdminRole role = roleService.getById(id); - if (role == null) { - return JsonResponse.error("管理角色不存在"); - } + public JsonResponse edit(@PathVariable(name = "id") Integer id) throws NotFoundException { + AdminRole role = roleService.findOrFail(id); return JsonResponse.data(role); } @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @PutMapping("/{id}") - @Transactional - public JsonResponse update(@PathVariable(name = "id") Integer id, @RequestBody @Validated AdminRoleRequest request) { - AdminRole role = roleService.getById(id); - if (role == null) { - return JsonResponse.error("管理角色不存在"); - } - if (role.getSlug() == BackendConstant.SUPER_ADMIN_ROLE) { + public JsonResponse update(@PathVariable(name = "id") Integer id, @RequestBody @Validated AdminRoleRequest request) throws NotFoundException { + AdminRole role = roleService.findOrFail(id); + if (role.getSlug().equals(BackendConstant.SUPER_ADMIN_ROLE)) { return JsonResponse.error("超级管理权限无法编辑"); } - AdminRole newRole = new AdminRole(); - newRole.setId(role.getId()); - newRole.setName(request.getName()); - - roleService.updateById(newRole); - - // 先清空已有的权限 - rolePermissionService.removeRolePermissionsByRoleId(role.getId()); - - if (request.getPermissionIds().length > 0) { - // 重新关联权限 - List rolePermissions = new ArrayList<>(); - for (int i = 0; i < request.getPermissionIds().length; i++) { - AdminRolePermission rolePermission = new AdminRolePermission(); - rolePermission.setRoleId(role.getId()); - rolePermission.setPermId(request.getPermissionIds()[i]); - rolePermissions.add(rolePermission); - } - rolePermissionService.saveBatch(rolePermissions); - } + roleService.updateWithPermissionIds(role, request.getName(), request.getPermissionIds()); return JsonResponse.success(); } @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @DeleteMapping("/{id}") - @Transactional - public JsonResponse destroy(@PathVariable(name = "id") Integer id) { - AdminRole role = roleService.getById(id); - if (role == null) { - return JsonResponse.error("角色不存在"); - } - if (role.getSlug() == BackendConstant.SUPER_ADMIN_ROLE) { + public JsonResponse destroy(@PathVariable(name = "id") Integer id) throws NotFoundException { + AdminRole role = roleService.findOrFail(id); + + if (role.getSlug().equals(BackendConstant.SUPER_ADMIN_ROLE)) { return JsonResponse.error("超级管理角色无法删除"); } - rolePermissionService.removeRolePermissionsByRoleId(role.getId()); - roleService.removeById(role.getId()); + roleService.removeWithPermissions(role); return JsonResponse.success(); } diff --git a/src/main/java/xyz/playedu/api/request/backend/AdminRoleRequest.java b/src/main/java/xyz/playedu/api/request/backend/AdminRoleRequest.java index 4897aef..28d622e 100644 --- a/src/main/java/xyz/playedu/api/request/backend/AdminRoleRequest.java +++ b/src/main/java/xyz/playedu/api/request/backend/AdminRoleRequest.java @@ -1,6 +1,7 @@ package xyz.playedu.api.request.backend; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; import org.hibernate.validator.constraints.Length; @@ -18,12 +19,13 @@ public class AdminRoleRequest implements Serializable { @Serial private static final long serialVersionUID = 1L; - @NotNull(message = "请输入管理角色名") + @NotNull(message = "name参数不存在") + @NotBlank(message = "请输入管理角色名") @Length(min = 1, max = 12, message = "管理角色名长度在1-16个字符之间") private String name; @JsonProperty("permission_ids") - @NotNull(message = "请选择权限") + @NotNull(message = "permission_ids参数不存在") private Integer[] permissionIds; } diff --git a/src/main/java/xyz/playedu/api/service/AdminRolePermissionService.java b/src/main/java/xyz/playedu/api/service/AdminRolePermissionService.java index 889b176..7da3fea 100644 --- a/src/main/java/xyz/playedu/api/service/AdminRolePermissionService.java +++ b/src/main/java/xyz/playedu/api/service/AdminRolePermissionService.java @@ -15,7 +15,7 @@ import java.util.List; public interface AdminRolePermissionService extends IService { - void removeRolePermissionsByRoleId(Integer roleId); + void removeByRoleId(Integer roleId); List getPermissionIdsByRoleIds(List roleIds); } diff --git a/src/main/java/xyz/playedu/api/service/AdminRoleService.java b/src/main/java/xyz/playedu/api/service/AdminRoleService.java index a5a2bce..39f1402 100644 --- a/src/main/java/xyz/playedu/api/service/AdminRoleService.java +++ b/src/main/java/xyz/playedu/api/service/AdminRoleService.java @@ -2,14 +2,27 @@ package xyz.playedu.api.service; import xyz.playedu.api.domain.AdminRole; import com.baomidou.mybatisplus.extension.service.IService; +import xyz.playedu.api.exception.NotFoundException; /** -* @author tengteng -* @description 针对表【admin_roles】的数据库操作Service -* @createDate 2023-02-21 15:53:27 -*/ + * @author tengteng + * @description 针对表【admin_roles】的数据库操作Service + * @createDate 2023-02-21 15:53:27 + */ public interface AdminRoleService extends IService { AdminRole getBySlug(String slug); + AdminRole createWithPermissionIds(String name, Integer[] permissionIds); + + void relatePermissions(AdminRole role, Integer[] permissionIds); + + void resetRelatePermissions(AdminRole role, Integer[] permissionIds); + + void updateWithPermissionIds(AdminRole role, String name, Integer[] permissionIds); + + AdminRole findOrFail(Integer id) throws NotFoundException; + + void removeWithPermissions(AdminRole role); + } diff --git a/src/main/java/xyz/playedu/api/service/impl/AdminRolePermissionServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/AdminRolePermissionServiceImpl.java index 2e21d4d..e47da3e 100644 --- a/src/main/java/xyz/playedu/api/service/impl/AdminRolePermissionServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/AdminRolePermissionServiceImpl.java @@ -19,7 +19,7 @@ import java.util.List; @Service public class AdminRolePermissionServiceImpl extends ServiceImpl implements AdminRolePermissionService { @Override - public void removeRolePermissionsByRoleId(Integer roleId) { + public void removeByRoleId(Integer roleId) { remove(query().getWrapper().eq("role_id", roleId)); } diff --git a/src/main/java/xyz/playedu/api/service/impl/AdminRoleServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/AdminRoleServiceImpl.java index 52970c4..38c0724 100644 --- a/src/main/java/xyz/playedu/api/service/impl/AdminRoleServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/AdminRoleServiceImpl.java @@ -1,10 +1,20 @@ package xyz.playedu.api.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import xyz.playedu.api.domain.AdminRole; +import xyz.playedu.api.domain.AdminRolePermission; +import xyz.playedu.api.exception.NotFoundException; +import xyz.playedu.api.service.AdminRolePermissionService; import xyz.playedu.api.service.AdminRoleService; import xyz.playedu.api.mapper.AdminRoleMapper; import org.springframework.stereotype.Service; +import xyz.playedu.api.util.HelperUtil; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; /** * @author tengteng @@ -12,13 +22,83 @@ import org.springframework.stereotype.Service; * @createDate 2023-02-21 15:53:27 */ @Service -public class AdminRoleServiceImpl extends ServiceImpl - implements AdminRoleService { +public class AdminRoleServiceImpl extends ServiceImpl implements AdminRoleService { + + @Autowired + private AdminRolePermissionService rolePermissionService; @Override public AdminRole getBySlug(String slug) { return getOne(query().getWrapper().eq("slug", slug)); } + + @Override + @Transactional + public AdminRole createWithPermissionIds(String name, Integer[] permissionIds) { + AdminRole role = new AdminRole(); + + role.setName(name); + role.setSlug(HelperUtil.randomString(12)); + role.setCreatedAt(new Date()); + role.setUpdatedAt(new Date()); + + save(role); + + relatePermissions(role, permissionIds); + + return role; + } + + @Override + public void relatePermissions(AdminRole role, Integer[] permissionIds) { + if (permissionIds == null || permissionIds.length == 0) { + return; + } + + List rolePermissions = new ArrayList<>(); + for (int i = 0; i < permissionIds.length; i++) { + AdminRolePermission rolePermission = new AdminRolePermission(); + rolePermission.setRoleId(role.getId()); + rolePermission.setPermId(permissionIds[i]); + rolePermissions.add(rolePermission); + } + rolePermissionService.saveBatch(rolePermissions); + } + + @Override + public void resetRelatePermissions(AdminRole role, Integer[] permissionIds) { + rolePermissionService.removeByRoleId(role.getId()); + relatePermissions(role, permissionIds); + } + + @Override + @Transactional + public void updateWithPermissionIds(AdminRole role, String name, Integer[] permissionIds) { + if (!role.getName().equals(name)) { + AdminRole newRole = new AdminRole(); + newRole.setId(role.getId()); + newRole.setName(name); + updateById(newRole); + } + + resetRelatePermissions(role, permissionIds); + } + + @Override + public AdminRole findOrFail(Integer id) throws NotFoundException { + AdminRole role = getOne(query().getWrapper().eq("id", id)); + if (role == null) { + throw new NotFoundException("管理角色不存在"); + } + return role; + } + + @Override + @Transactional + public void removeWithPermissions(AdminRole role) { + rolePermissionService.removeByRoleId(role.getId()); + removeById(role.getId()); + } }