完成角色权限分配功能的迁移
This commit is contained in:
@@ -15,23 +15,23 @@ public interface AdminRoleMapper extends BaseMapper<AdminRoleDO> {
|
||||
return selectList(new QueryWrapper<AdminRoleDO>().eq("admin_id", adminId));
|
||||
}
|
||||
|
||||
// default List<AdminRoleDO> selectListByAccountIds(Collection<Integer> accountIds) {
|
||||
// return selectList(new QueryWrapper<AdminRoleDO>().in("account_id", accountIds));
|
||||
// }
|
||||
//
|
||||
// default int deleteByAccountId(Integer accountId) {
|
||||
// return delete(new QueryWrapper<AdminRoleDO>().eq("account_id", accountId));
|
||||
// }
|
||||
//
|
||||
// default int deleteByRoleId(Integer roleId) {
|
||||
// return delete(new QueryWrapper<AdminRoleDO>().eq("role_id", roleId));
|
||||
// }
|
||||
default List<AdminRoleDO> selectListByAdminId(Integer adminId) {
|
||||
return selectList(new QueryWrapper<AdminRoleDO>().eq("admin_id", adminId));
|
||||
}
|
||||
|
||||
default int deleteByAdminId(Integer adminId) {
|
||||
return delete(new QueryWrapper<AdminRoleDO>().eq("admin_id", adminId));
|
||||
}
|
||||
|
||||
default int deleteByRoleId(Integer roleId) {
|
||||
return delete(new QueryWrapper<AdminRoleDO>().eq("role_id", roleId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量插入。因为 MyBaits Plus 的批量插入是基于 Service 实现,所以只好写 XML
|
||||
*
|
||||
* @param accountRoleDOs 数组
|
||||
* @param adminRoleDOs 数组
|
||||
*/
|
||||
int insertList(@Param("accountRoleDOs") List<AdminRoleDO> accountRoleDOs);
|
||||
int insertList(@Param("adminRoleDOs") List<AdminRoleDO> adminRoleDOs);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package cn.iocoder.mall.systemservice.manager.permission;
|
||||
|
||||
import cn.iocoder.common.framework.util.CollectionUtils;
|
||||
import cn.iocoder.mall.systemservice.rpc.permission.dto.PermissionAssignAdminRoleDTO;
|
||||
import cn.iocoder.mall.systemservice.rpc.permission.dto.PermissionAssignRoleResourceDTO;
|
||||
import cn.iocoder.mall.systemservice.service.permission.PermissionService;
|
||||
import cn.iocoder.mall.systemservice.service.permission.ResourceService;
|
||||
@@ -31,13 +32,13 @@ public class PermissionManager {
|
||||
* @param roleId 角色编号
|
||||
* @return 资源编号列表
|
||||
*/
|
||||
public Set<Integer> listRoleResourceId(Integer roleId) {
|
||||
public Set<Integer> listRoleResourceIds(Integer roleId) {
|
||||
// 超级管理员,拥有所有资源
|
||||
if (roleService.hasSuperAdmin(Collections.singleton(roleId))) {
|
||||
return CollectionUtils.convertSet(resourceService.listResource(), ResourceBO::getId);
|
||||
return CollectionUtils.convertSet(resourceService.listResources(), ResourceBO::getId);
|
||||
}
|
||||
// 非超级管理员,查询拥有资源
|
||||
return permissionService.listRoleResourceId(roleId);
|
||||
return permissionService.listRoleResourceIds(roleId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -49,4 +50,24 @@ public class PermissionManager {
|
||||
permissionService.assignRoleResource(assignResourceDTO.getRoleId(), assignResourceDTO.getResourceIds());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得管理员拥有的角色编号列表
|
||||
*
|
||||
* @param adminId 管理员编号
|
||||
* @return 角色编号列表
|
||||
*/
|
||||
public Set<Integer> listAdminRoleIds(Integer adminId) {
|
||||
return permissionService.listAdminRoleIds(adminId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 赋予管理员角色
|
||||
*
|
||||
* @param assignAdminRoleDTO 赋予管理员角色 DTO
|
||||
*/
|
||||
public void assignAdminRole(PermissionAssignAdminRoleDTO assignAdminRoleDTO) {
|
||||
permissionService.assignAdminRole(assignAdminRoleDTO.getAdminId(), assignAdminRoleDTO.getRoleIds());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -69,8 +69,8 @@ public class ResourceManager {
|
||||
*
|
||||
* @return 资源列表
|
||||
*/
|
||||
public List<ResourceVO> listResource() {
|
||||
List<ResourceBO> resourceBOs = resourceService.listResource();
|
||||
public List<ResourceVO> listResources() {
|
||||
List<ResourceBO> resourceBOs = resourceService.listResources();
|
||||
return ResourceConvert.INSTANCE.convertList02(resourceBOs);
|
||||
}
|
||||
|
||||
@@ -80,8 +80,8 @@ public class ResourceManager {
|
||||
* @param resourceIds 资源编号列表
|
||||
* @return 资源列表
|
||||
*/
|
||||
public List<ResourceVO> listResource(List<Integer> resourceIds) {
|
||||
List<ResourceBO> resourceBOs = resourceService.listResource(resourceIds);
|
||||
public List<ResourceVO> listResources(List<Integer> resourceIds) {
|
||||
List<ResourceBO> resourceBOs = resourceService.listResources(resourceIds);
|
||||
return ResourceConvert.INSTANCE.convertList02(resourceBOs);
|
||||
}
|
||||
|
||||
@@ -92,13 +92,13 @@ public class ResourceManager {
|
||||
* @param type 资源类型,允许空
|
||||
* @return 资源列表
|
||||
*/
|
||||
public List<ResourceVO> listRoleResource(Collection<Integer> roleIds, Integer type) {
|
||||
public List<ResourceVO> listRoleResources(Collection<Integer> roleIds, Integer type) {
|
||||
List<ResourceBO> resourceBOs;
|
||||
// 判断是否为超管。若是超管,默认有所有权限
|
||||
if (roleService.hasSuperAdmin(roleIds)) {
|
||||
resourceBOs = resourceService.listResourceByType(type);
|
||||
resourceBOs = resourceService.listResourcesByType(type);
|
||||
} else {
|
||||
resourceBOs = resourceService.listRoleResourceByType(roleIds, type);
|
||||
resourceBOs = resourceService.listRoleResourcesByType(roleIds, type);
|
||||
}
|
||||
return ResourceConvert.INSTANCE.convertList02(resourceBOs);
|
||||
}
|
||||
|
||||
@@ -63,13 +63,23 @@ public class RoleManager {
|
||||
return RoleConvert.INSTANCE.convert(roleBO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得所有角色
|
||||
*
|
||||
* @return 角色列表
|
||||
*/
|
||||
public List<RoleVO> listAllRoles() {
|
||||
List<RoleBO> roleBOs = roleService.listAllRole();
|
||||
return RoleConvert.INSTANCE.convertList02(roleBOs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得角色列表
|
||||
*
|
||||
* @param roleIds 角色编号列表
|
||||
* @return 角色列表
|
||||
*/
|
||||
public List<RoleVO> listRole(List<Integer> roleIds) {
|
||||
public List<RoleVO> listRoles(List<Integer> roleIds) {
|
||||
List<RoleBO> roleBOs = roleService.listRole(roleIds);
|
||||
return RoleConvert.INSTANCE.convertList02(roleBOs);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package cn.iocoder.mall.systemservice.rpc.permission;
|
||||
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.mall.systemservice.manager.permission.PermissionManager;
|
||||
import cn.iocoder.mall.systemservice.rpc.permission.dto.PermissionAssignAdminRoleDTO;
|
||||
import cn.iocoder.mall.systemservice.rpc.permission.dto.PermissionAssignRoleResourceDTO;
|
||||
import org.apache.dubbo.config.annotation.Service;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -20,8 +21,8 @@ public class PermissionRpcImpl implements PermissionRpc {
|
||||
private PermissionManager permissionManager;
|
||||
|
||||
@Override
|
||||
public CommonResult<Set<Integer>> listRoleResourceId(Integer roleId) {
|
||||
return success(permissionManager.listRoleResourceId(roleId));
|
||||
public CommonResult<Set<Integer>> listRoleResourceIds(Integer roleId) {
|
||||
return success(permissionManager.listRoleResourceIds(roleId));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -30,4 +31,15 @@ public class PermissionRpcImpl implements PermissionRpc {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Set<Integer>> listAdminRoleIds(Integer adminId) {
|
||||
return success(permissionManager.listAdminRoleIds(adminId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Boolean> assignAdminRole(PermissionAssignAdminRoleDTO assignAdminRoleDTO) {
|
||||
permissionManager.assignAdminRole(assignAdminRoleDTO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,17 +46,17 @@ public class ResourceRpcImpl implements ResourceRpc {
|
||||
|
||||
@Override
|
||||
public CommonResult<List<ResourceVO>> listResource() {
|
||||
return success(resourceManager.listResource());
|
||||
return success(resourceManager.listResources());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<List<ResourceVO>> listResource(List<Integer> resourceIds) {
|
||||
return success(resourceManager.listResource(resourceIds));
|
||||
return success(resourceManager.listResources(resourceIds));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<List<ResourceVO>> listRoleResource(Collection<Integer> roleIds, Integer type) {
|
||||
return success(resourceManager.listRoleResource(roleIds, type));
|
||||
return success(resourceManager.listRoleResources(roleIds, type));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -47,8 +47,13 @@ public class RoleRpcImpl implements RoleRpc {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<List<RoleVO>> listRole(List<Integer> roleIds) {
|
||||
return success(roleManager.listRole(roleIds));
|
||||
public CommonResult<List<RoleVO>> listAllRoles() {
|
||||
return success(roleManager.listAllRoles());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<List<RoleVO>> listRoles(List<Integer> roleIds) {
|
||||
return success(roleManager.listRoles(roleIds));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,23 +1,26 @@
|
||||
package cn.iocoder.mall.systemservice.service.permission;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.iocoder.common.framework.util.CollectionUtils;
|
||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.admin.AdminDO;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.permission.AdminRoleDO;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.permission.RoleDO;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.dataobject.permission.RoleResourceDO;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.mapper.admin.AdminMapper;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.mapper.permission.AdminRoleMapper;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.mapper.permission.ResourceMapper;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.mapper.permission.RoleMapper;
|
||||
import cn.iocoder.mall.systemservice.dal.mysql.mapper.permission.RoleResourceMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.mall.systemservice.enums.SystemErrorCodeEnum.AUTHORIZATION_ROLE_ASSIGN_RESOURCE_NOT_EXISTS;
|
||||
import static cn.iocoder.mall.systemservice.enums.SystemErrorCodeEnum.ROLE_NOT_EXISTS;
|
||||
import static cn.iocoder.mall.systemservice.enums.SystemErrorCodeEnum.*;
|
||||
|
||||
/**
|
||||
* 权限 Service
|
||||
@@ -25,6 +28,8 @@ import static cn.iocoder.mall.systemservice.enums.SystemErrorCodeEnum.ROLE_NOT_E
|
||||
@Service
|
||||
public class PermissionService {
|
||||
|
||||
@Autowired
|
||||
private AdminMapper adminMapper;
|
||||
@Autowired
|
||||
private RoleMapper roleMapper;
|
||||
@Autowired
|
||||
@@ -40,7 +45,7 @@ public class PermissionService {
|
||||
* @param roleId 角色编号
|
||||
* @return 资源编号列表
|
||||
*/
|
||||
public Set<Integer> listRoleResourceId(Integer roleId) {
|
||||
public Set<Integer> listRoleResourceIds(Integer roleId) {
|
||||
List<RoleResourceDO> roleResourceDOs = roleResourceMapper.selectListByRoleId(roleId);
|
||||
return CollectionUtils.convertSet(roleResourceDOs, RoleResourceDO::getResourceId);
|
||||
}
|
||||
@@ -51,6 +56,7 @@ public class PermissionService {
|
||||
* @param roleId 角色编号
|
||||
* @param resourceIds 资源编号列表
|
||||
*/
|
||||
@Transactional
|
||||
public void assignRoleResource(Integer roleId, Set<Integer> resourceIds) {
|
||||
// 校验角色是否存在
|
||||
if (roleMapper.selectById(roleId) == null) {
|
||||
@@ -68,14 +74,52 @@ public class PermissionService {
|
||||
roleResourceMapper.deleteByRoleId(roleId);
|
||||
// 创建 RoleResourceDO 数组,并插入到数据库
|
||||
if (!CollectionUtils.isEmpty(resourceIds)) {
|
||||
List<RoleResourceDO> roleResources = resourceIds.stream().map(resourceId -> {
|
||||
RoleResourceDO roleResource = new RoleResourceDO().setRoleId(roleId).setResourceId(resourceId);
|
||||
roleResource.setCreateTime(new Date());
|
||||
roleResource.setDeleted(DeletedStatusEnum.DELETED_NO.getValue());
|
||||
return roleResource;
|
||||
}).collect(Collectors.toList());
|
||||
List<RoleResourceDO> roleResources = resourceIds.stream()
|
||||
.map(resourceId -> new RoleResourceDO().setRoleId(roleId).setResourceId(resourceId)).collect(Collectors.toList());
|
||||
roleResourceMapper.insertList(roleResources);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 赋予管理员角色
|
||||
*
|
||||
* @param adminId 管理员编号
|
||||
* @param roleIds 角色编号列表
|
||||
*/
|
||||
@Transactional
|
||||
public void assignAdminRole(Integer adminId, Set<Integer> roleIds) {
|
||||
// 校验账号存在
|
||||
AdminDO admin = adminMapper.selectById(adminId);
|
||||
if (admin == null) {
|
||||
throw ServiceExceptionUtil.exception(ADMIN_NOT_FOUND);
|
||||
}
|
||||
// 校验是否有不存在的角色
|
||||
if (!CollectionUtils.isEmpty(roleIds)) {
|
||||
List<RoleDO> roles = roleMapper.selectBatchIds(roleIds);
|
||||
if (roles.size() != roleIds.size()) {
|
||||
throw ServiceExceptionUtil.exception(ADMIN_ASSIGN_ROLE_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
// TODO 芋艿,这里先简单实现。即方式是,删除老的分配的角色关系,然后添加新的分配的角色关系
|
||||
// 标记管理员角色源关系都为删除
|
||||
adminRoleMapper.deleteByAdminId(adminId);
|
||||
// 创建 RoleResourceDO 数组,并插入到数据库
|
||||
if (!CollectionUtil.isEmpty(roleIds)) {
|
||||
List<AdminRoleDO> adminRoleDOs = roleIds.stream()
|
||||
.map(roleId -> new AdminRoleDO().setAdminId(adminId).setRoleId(roleId)).collect(Collectors.toList());
|
||||
adminRoleMapper.insertList(adminRoleDOs);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得管理员拥有的角色编号列表
|
||||
*
|
||||
* @param adminId 管理员编号
|
||||
* @return 角色编号列表
|
||||
*/
|
||||
public Set<Integer> listAdminRoleIds(Integer adminId) {
|
||||
List<AdminRoleDO> adminRoleDOs = adminRoleMapper.selectListByAdminId(adminId);
|
||||
return CollectionUtils.convertSet(adminRoleDOs, AdminRoleDO::getRoleId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ public class ResourceService {
|
||||
* @param resourceIds 资源编号列表
|
||||
* @return 资源列表
|
||||
*/
|
||||
public List<ResourceBO> listResource(List<Integer> resourceIds) {
|
||||
public List<ResourceBO> listResources(List<Integer> resourceIds) {
|
||||
List<ResourceDO> resourceDOs = resourceMapper.selectBatchIds(resourceIds);
|
||||
return ResourceConvert.INSTANCE.convertList(resourceDOs);
|
||||
}
|
||||
@@ -124,7 +124,7 @@ public class ResourceService {
|
||||
*
|
||||
* @return 资源树结构
|
||||
*/
|
||||
public List<ResourceBO> listResource() {
|
||||
public List<ResourceBO> listResources() {
|
||||
List<ResourceDO> resourceDOs = resourceMapper.selectList(null);
|
||||
return ResourceConvert.INSTANCE.convertList(resourceDOs);
|
||||
}
|
||||
@@ -135,7 +135,7 @@ public class ResourceService {
|
||||
* @param type 资源类型,允许空
|
||||
* @return 资源列表
|
||||
*/
|
||||
public List<ResourceBO> listResourceByType(Integer type) {
|
||||
public List<ResourceBO> listResourcesByType(Integer type) {
|
||||
List<ResourceDO> resourceDOs = resourceMapper.selectListByType(type);
|
||||
return ResourceConvert.INSTANCE.convertList(resourceDOs);
|
||||
}
|
||||
@@ -147,7 +147,7 @@ public class ResourceService {
|
||||
* @param type 资源类型,允许空
|
||||
* @return 资源列表
|
||||
*/
|
||||
public List<ResourceBO> listRoleResourceByType(Collection<Integer> roleIds, Integer type) {
|
||||
public List<ResourceBO> listRoleResourcesByType(Collection<Integer> roleIds, Integer type) {
|
||||
List<RoleResourceDO> roleResourceDOs = roleResourceMapper.selectListByRoleIds(roleIds);
|
||||
if (CollectionUtils.isEmpty(roleResourceDOs)) {
|
||||
return Collections.emptyList();
|
||||
|
||||
@@ -110,6 +110,16 @@ public class RoleService {
|
||||
return RoleConvert.INSTANCE.convert(roleDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得所有角色
|
||||
*
|
||||
* @return 角色列表
|
||||
*/
|
||||
public List<RoleBO> listAllRole() {
|
||||
List<RoleDO> roleDOs = roleMapper.selectList(null);
|
||||
return RoleConvert.INSTANCE.convertList(roleDOs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得角色列表
|
||||
*
|
||||
|
||||
@@ -5,7 +5,6 @@ import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
@@ -13,7 +12,7 @@ import java.util.Date;
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ExceptionLogAddBO implements Serializable {
|
||||
public class ExceptionLogAddBO {
|
||||
|
||||
/**
|
||||
* 账号编号
|
||||
|
||||
Reference in New Issue
Block a user