role代码优化

This commit is contained in:
none 2023-02-24 23:03:58 +08:00
parent b47a7adb01
commit e7128852ad
6 changed files with 118 additions and 80 deletions

View File

@ -8,17 +8,13 @@ import xyz.playedu.api.constant.BPermissionConstant;
import xyz.playedu.api.constant.BackendConstant; import xyz.playedu.api.constant.BackendConstant;
import xyz.playedu.api.domain.AdminPermission; import xyz.playedu.api.domain.AdminPermission;
import xyz.playedu.api.domain.AdminRole; 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.middleware.BackendPermissionMiddleware;
import xyz.playedu.api.request.backend.AdminRoleRequest; import xyz.playedu.api.request.backend.AdminRoleRequest;
import xyz.playedu.api.service.AdminPermissionService; import xyz.playedu.api.service.AdminPermissionService;
import xyz.playedu.api.service.AdminRolePermissionService;
import xyz.playedu.api.service.AdminRoleService; import xyz.playedu.api.service.AdminRoleService;
import xyz.playedu.api.types.JsonResponse; 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.HashMap;
import java.util.List; import java.util.List;
@ -36,9 +32,6 @@ public class AdminRoleController {
@Autowired @Autowired
private AdminPermissionService permissionService; private AdminPermissionService permissionService;
@Autowired
private AdminRolePermissionService rolePermissionService;
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE)
@GetMapping("/index") @GetMapping("/index")
public JsonResponse index() { public JsonResponse index() {
@ -57,91 +50,41 @@ public class AdminRoleController {
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE)
@PostMapping("/create") @PostMapping("/create")
@Transactional
public JsonResponse store(@RequestBody @Validated AdminRoleRequest request) { public JsonResponse store(@RequestBody @Validated AdminRoleRequest request) {
AdminRole role = new AdminRole(); roleService.createWithPermissionIds(request.getName(), request.getPermissionIds());
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<AdminRolePermission> 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);
}
return JsonResponse.success(); return JsonResponse.success();
} }
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE)
@GetMapping("/{id}") @GetMapping("/{id}")
public JsonResponse edit(@PathVariable(name = "id") Integer id) { public JsonResponse edit(@PathVariable(name = "id") Integer id) throws NotFoundException {
AdminRole role = roleService.getById(id); AdminRole role = roleService.findOrFail(id);
if (role == null) {
return JsonResponse.error("管理角色不存在");
}
return JsonResponse.data(role); return JsonResponse.data(role);
} }
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE)
@PutMapping("/{id}") @PutMapping("/{id}")
@Transactional public JsonResponse update(@PathVariable(name = "id") Integer id, @RequestBody @Validated AdminRoleRequest request) throws NotFoundException {
public JsonResponse update(@PathVariable(name = "id") Integer id, @RequestBody @Validated AdminRoleRequest request) { AdminRole role = roleService.findOrFail(id);
AdminRole role = roleService.getById(id); if (role.getSlug().equals(BackendConstant.SUPER_ADMIN_ROLE)) {
if (role == null) {
return JsonResponse.error("管理角色不存在");
}
if (role.getSlug() == BackendConstant.SUPER_ADMIN_ROLE) {
return JsonResponse.error("超级管理权限无法编辑"); return JsonResponse.error("超级管理权限无法编辑");
} }
AdminRole newRole = new AdminRole(); roleService.updateWithPermissionIds(role, request.getName(), request.getPermissionIds());
newRole.setId(role.getId());
newRole.setName(request.getName());
roleService.updateById(newRole);
// 先清空已有的权限
rolePermissionService.removeRolePermissionsByRoleId(role.getId());
if (request.getPermissionIds().length > 0) {
// 重新关联权限
List<AdminRolePermission> 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);
}
return JsonResponse.success(); return JsonResponse.success();
} }
@BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE) @BackendPermissionMiddleware(slug = BPermissionConstant.ADMIN_ROLE)
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@Transactional public JsonResponse destroy(@PathVariable(name = "id") Integer id) throws NotFoundException {
public JsonResponse destroy(@PathVariable(name = "id") Integer id) { AdminRole role = roleService.findOrFail(id);
AdminRole role = roleService.getById(id);
if (role == null) { if (role.getSlug().equals(BackendConstant.SUPER_ADMIN_ROLE)) {
return JsonResponse.error("角色不存在");
}
if (role.getSlug() == BackendConstant.SUPER_ADMIN_ROLE) {
return JsonResponse.error("超级管理角色无法删除"); return JsonResponse.error("超级管理角色无法删除");
} }
rolePermissionService.removeRolePermissionsByRoleId(role.getId()); roleService.removeWithPermissions(role);
roleService.removeById(role.getId());
return JsonResponse.success(); return JsonResponse.success();
} }

View File

@ -1,6 +1,7 @@
package xyz.playedu.api.request.backend; package xyz.playedu.api.request.backend;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
@ -18,12 +19,13 @@ public class AdminRoleRequest implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@NotNull(message = "请输入管理角色名") @NotNull(message = "name参数不存在")
@NotBlank(message = "请输入管理角色名")
@Length(min = 1, max = 12, message = "管理角色名长度在1-16个字符之间") @Length(min = 1, max = 12, message = "管理角色名长度在1-16个字符之间")
private String name; private String name;
@JsonProperty("permission_ids") @JsonProperty("permission_ids")
@NotNull(message = "请选择权限") @NotNull(message = "permission_ids参数不存在")
private Integer[] permissionIds; private Integer[] permissionIds;
} }

View File

@ -15,7 +15,7 @@ import java.util.List;
public interface AdminRolePermissionService extends IService<AdminRolePermission> { public interface AdminRolePermissionService extends IService<AdminRolePermission> {
void removeRolePermissionsByRoleId(Integer roleId); void removeByRoleId(Integer roleId);
List<Integer> getPermissionIdsByRoleIds(List<Integer> roleIds); List<Integer> getPermissionIdsByRoleIds(List<Integer> roleIds);
} }

View File

@ -2,14 +2,27 @@ package xyz.playedu.api.service;
import xyz.playedu.api.domain.AdminRole; import xyz.playedu.api.domain.AdminRole;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import xyz.playedu.api.exception.NotFoundException;
/** /**
* @author tengteng * @author tengteng
* @description 针对表admin_roles的数据库操作Service * @description 针对表admin_roles的数据库操作Service
* @createDate 2023-02-21 15:53:27 * @createDate 2023-02-21 15:53:27
*/ */
public interface AdminRoleService extends IService<AdminRole> { public interface AdminRoleService extends IService<AdminRole> {
AdminRole getBySlug(String slug); 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);
} }

View File

@ -19,7 +19,7 @@ import java.util.List;
@Service @Service
public class AdminRolePermissionServiceImpl extends ServiceImpl<AdminRolePermissionMapper, AdminRolePermission> implements AdminRolePermissionService { public class AdminRolePermissionServiceImpl extends ServiceImpl<AdminRolePermissionMapper, AdminRolePermission> implements AdminRolePermissionService {
@Override @Override
public void removeRolePermissionsByRoleId(Integer roleId) { public void removeByRoleId(Integer roleId) {
remove(query().getWrapper().eq("role_id", roleId)); remove(query().getWrapper().eq("role_id", roleId));
} }

View File

@ -1,10 +1,20 @@
package xyz.playedu.api.service.impl; package xyz.playedu.api.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.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.service.AdminRoleService;
import xyz.playedu.api.mapper.AdminRoleMapper; import xyz.playedu.api.mapper.AdminRoleMapper;
import org.springframework.stereotype.Service; 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 * @author tengteng
@ -12,13 +22,83 @@ import org.springframework.stereotype.Service;
* @createDate 2023-02-21 15:53:27 * @createDate 2023-02-21 15:53:27
*/ */
@Service @Service
public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole> public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole> implements AdminRoleService {
implements AdminRoleService {
@Autowired
private AdminRolePermissionService rolePermissionService;
@Override @Override
public AdminRole getBySlug(String slug) { public AdminRole getBySlug(String slug) {
return getOne(query().getWrapper().eq("slug", 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<AdminRolePermission> 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());
}
} }