mirror of
https://github.com/PlayEdu/PlayEdu
synced 2025-07-24 10:19:31 +08:00
role代码优化
This commit is contained in:
parent
b47a7adb01
commit
e7128852ad
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user